Backbone.js:跨视图绑定/取消绑定事件

时间:2011-11-18 10:58:14

标签: backbone.js backbone-events

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

1 个答案:

答案 0 :(得分:4)

更改以下行:

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

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