2013-11-21 65 views
1

我无法在文档中找到有关从DOM中删除具有绑定事件的元素时开发人员应该执行的操作的任何内容。 jQuery有remove()和detach()。前者消除了束缚事件,后者则没有。当调用Element#remove()时,开发人员应该做什么?在Dart中删除绑定事件中的DOM元素

回答

3

听众是元素对任何听的引用 - 这意味着元素将保持任何正在收听的东西,直到元素被GC'd。

侦听不会将侦听器的引用添加到元素,因此元素可以在侦听器之前GC'd。

思考GC的方法是引用 - 当对象A具有对象B的引用时,对象A保留对象B.但是,除非对象B有一个引用返回到对象A,否则B不会阻止A被GC_d。事件是从目标到听众的引用,但不是其他方式。另外,如果对象A有一个对象B的引用,并且B对A有一个引用,那么它们互相保持着对方,但是如果没有任何引用它们,那么它们都可以是GC' d。

这一切的意思是,如果收听元素的代码预计有一个接近元素的生命周期,或者比元素长,那么它不需要unlisten。但是,如果元素预期寿命长,而且听者短暂,那么应该将听者分开(这很有意义 - 为什么短暂的听者仍然在听某些东西?)。 (Google工程师Pete Blois提供的答案)。