处理 Collection 后关闭 Backbone 事件

Turn Backbone events off when Collection is disposed of

我 Collection 订阅了我在 Backbone object 本身触发的事件:

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

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

        });
    }
});

但是,当我创建此 Collection 的新实例时,Backbone 添加了 另一个 侦听器。触发此事件时,会多次触发回调。有没有办法:

  1. 每个 Collection 生命周期只设置一次?
  2. unsubscribe/turn关闭此事件侦听器的最佳位置在哪里?

发生这种情况的原因是因为每次创建新实例(调用集合的初始化方法)时,您将事件处理程序直接绑定到 Backbone 对象。

你想要做的是反转关系,让你的集合监听事件并在你处理你的集合时取消订阅。由于版本 0.9.9 Backbone 提供了一种内置的方法来使用 listenTo.

例如

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

        });

要unsubscribe/turn关闭这个事件监听器你可以使用stopListening method (they should also be automatically removed if you remove your collection). With views when you call remove它会自动调用stopListening.

如果您真的想使用将事件处理程序直接绑定到 Backbone 对象并只绑定一次,您可以通过将事件绑定移到初始化方法之外来执行此操作,但您可能会最好使用 listenTo。