Javascript 处理收集时关闭主干事件

Javascript 处理收集时关闭主干事件,javascript,backbone.js,Javascript,Backbone.js,我让我的集合订阅在主干对象本身上触发的事件: const Items = BaseCollection.extend({ model: ItemModel, initialize() { BaseCollection.prototype.initialize.apply(this, arguments); Backbone.on('api:data:foobar', (data) = > { }); } });

我让我的集合订阅在主干对象本身上触发的事件:

const Items = BaseCollection.extend({
    model: ItemModel,

    initialize() {
        BaseCollection.prototype.initialize.apply(this, arguments);
        Backbone.on('api:data:foobar', (data) = > {

        });
    }
});
但是,当我创建此集合的新实例时,主干会添加另一个侦听器。触发此事件时,将多次触发回调。有没有办法:

  • 每个集合生命周期仅设置一次
  • 取消订阅/关闭此事件侦听器的最佳位置在哪里

  • 发生这种情况的原因是,每次创建新实例(调用集合的initialize方法)时,都会将事件处理程序直接绑定到主干对象

    相反,您要做的是颠倒关系,让您的收藏收听事件,并在处理收藏时取消订阅。因为版本0.9.9主干提供了一种使用

    比如说

     initialize() {
            BaseCollection.prototype.initialize.apply(this, arguments);
            this.listenTo(Backbone, 'api:data:foobar', (data) = > {
    
            });
    
    要取消订阅/关闭此事件侦听器,您可以使用该方法(如果删除集合,也应自动删除这些侦听器)。当您调用With views时,它将自动调用
    stopListening

    如果您真的想使用将事件处理程序直接绑定到主干对象,并且只绑定一次,您可以通过将事件绑定移到initialize方法之外来实现这一点,但是使用listenTo可能会更好