打电话是一种不好的做法吗undelegateEvents()
在视图中remove()
方法?为什么骨干人员没有默认包含它?
我意识到,当简单地重新初始化视图变量时,我陷入了很多绑定问题。虽然undelegateEvents()
创建新视图时会自动调用,它会尝试取消新实例化视图的事件委托,而不是前一个视图的事件。因此,除非每次都手动调用它,否则幽灵事件回调将保持活动状态并搞砸我的应用程序。
处理这个问题的最佳方法是什么?
打电话是一种不好的做法吗undelegateEvents()
在视图中remove()
method?
除非您要实现自己的,否则没有必要remove()
而你不打电话Backbone.View.remove()
or this.$el.remove()
。至少,如果您使用 jQuery 的话。呼唤remove()
在主干视图上将调用jQuery.remove()
无论如何,这都会删除所有 DOM 事件侦听器。
我意识到,当简单地重新初始化视图变量时,我陷入了很多绑定问题。
很多人似乎使用 Backbone.Events ,就像使用某种魔法一样,他们不需要在之后进行清理,例如:
var View = Backbone.View.extend( {
initialize : function ( options ) {
// `on()` or `bind()`
this.model.on( 'something', this.render, this );
}
} );
请参阅我的回答将事件委托给 Backbone 中的父视图 https://stackoverflow.com/questions/10485610/delegating-events-to-a-parent-view-in-backbone/10486571#10486571
您遇到的幽灵事件问题是否可能与 Backbone 事件有关,而不是与 DOM 事件有关?
如果保留模型对象但想要删除该视图对象或其 Backbone 事件注册,则必须执行以下操作view.model.off( null, null, this );
。您必须取消绑定在任何外部对象上注册的事件。如果你愿意,你可以覆盖Backbone.View.remove()
并在那里执行,但默认情况下该方法只是简写view.$el.remove()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)