Pre*_*hev 11 javascript backbone.js
调用undelegateEvents()
view remove()
方法是不好的做法?为什么骨干人员默认不包括它?
我意识到,当简单地重新初始化视图变量时,我陷入了这么多绑定问题.虽然undelegateEvents()
在创建新视图时会自动调用,但它会尝试取消新实例化视图的事件,而不是前一个视图.因此,除非每次手动调用它,否则ghost事件回调仍然存在并且搞砸了我的应用程序.
处理这个问题的最佳方法是什么?
调用
undelegateEvents()
viewremove()
方法是不好的做法?
没有必要,除非你实现自己的remove()
,你不打电话Backbone.View.remove()
或this.$el.remove()
.那就是你至少使用jQuery.调用remove()
Backbone视图将调用jQuery.remove()
哪个将删除所有DOM事件侦听器.
我意识到,当简单地重新初始化视图变量时,我陷入了这么多绑定问题.
很多人似乎都在使用Backbone.Events,这是他们之后不需要清理的某种魔法,例如:
var View = Backbone.View.extend( {
initialize : function ( options ) {
// `on()` or `bind()`
this.model.on( 'something', this.render, this );
}
} );
Run Code Online (Sandbox Code Playgroud)
请参阅我在Backbone中将事件委派给父视图的答案
您遇到的鬼事件是否可能与Backbone事件而不是DOM事件有关?
如果您保留模型对象但想要摆脱该视图对象或其Backbone事件注册,则必须这样做view.model.off( null, null, this );
.您必须取消绑定在任何外部对象上注册的事件.如果你愿意,你可以覆盖Backbone.View.remove()
并在那里进行,但默认情况下,该方法只是简写view.$el.remove()
.