处理 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 添加了 另一个 侦听器。触发此事件时,会多次触发回调。有没有办法:
- 每个 Collection 生命周期只设置一次?
- 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。
我 Collection 订阅了我在 Backbone object 本身触发的事件:
const Items = BaseCollection.extend({
model: ItemModel,
initialize() {
BaseCollection.prototype.initialize.apply(this, arguments);
Backbone.on('api:data:foobar', (data) = > {
});
}
});
但是,当我创建此 Collection 的新实例时,Backbone 添加了 另一个 侦听器。触发此事件时,会多次触发回调。有没有办法:
- 每个 Collection 生命周期只设置一次?
- 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。