我正在使用event aggregator pattern by Derick Bailey,他已经说明了一个对象管理事件的提升和这些事件的订阅者的模式。
一切正常,我在一个视图中触发事件并在其他视图中订阅它们。当两个或多个视图订阅一个事件然后在丢弃一个视图时,其中一个视图取消了该事件的后续问题。这导致所有其他视图也被取消订阅。
是否有一些解决方法?
更新
以下是我在视图中使用的一些代码:
var EventAggregator = _.extend({}, Backbone.Events);
new MyView({
collection: MyCollection,
eventagg: EventAggregator
});
MyView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render', 'close', 'actionFnc');
this.childviews = [];
this.options.eventagg.bind('evt:action', this.actionFnc);
this.render();
},
render: function() {
},
close: function() {
_(this.childViews).each(function(childview) {
childview.close();
});
$(this.el).empty();
this.options.eventagg.unbind('evt:action');
},
actionFnc: function() {
// do something over here
}
});
答案 0 :(得分:4)
更改以下行:
this.options.eventagg.unbind('evt:action');
到
this.options.eventagg.unbind('evt:action', this.actionFnc);