2

我正在使用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
    }
});
4

1 回答 1

4

更改以下行:

this.options.eventagg.unbind('evt:action');

this.options.eventagg.unbind('evt:action', this.actionFnc);
于 2011-11-18T16:25:01.023 回答