不再需要视图时取消事件委托的最佳方法

2024-03-14

打电话是一种不好的做法吗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(使用前将#替换为@)

不再需要视图时取消事件委托的最佳方法 的相关文章

随机推荐