2011-11-18 108 views
2

我使用event aggregator pattern by Derick Bailey,他已经说明了一个对象管理事件引发模式和这些事件的订阅者的模式。Backbone.js:跨视图绑定/解除绑定

这一切都工作正常,我在一个视图中触发事件,并订阅他们在其他。当两个或两个以上的视图订阅一个事件,然后在放弃一个视图时,这个问题就出现了,其中一个视图取消了来自事件的订阅。这会导致所有其他视图也从该事件中取消订阅。

有没有一些解决方法呢?

更新

这里是代码一点点,我使用我的看法:

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

你能分享一些代码吗?具体而言,您如何放弃视图以及是否覆盖基本view.remove()。 – timDunham

+0

@timDunham - 我编辑了这个问题。我不重写view.remove()方法。 – vikmalhotra

回答

4

更改以下行:

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

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

这是有道理的。谢啦 – vikmalhotra