2011-11-18 136 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