2012-02-20 94 views
3

我有一個有兩個視圖的backbonejs應用程序。它看起來像這樣:Backbonejs:如何刪除視圖時取消綁定集合綁定?

<body> 
    <header></header> 
    <div id="content"></div> 
</body> 

每次加載視圖時,應用程序都會通過完全覆蓋#content的內容來覆蓋當前視圖。

// Like this... 
$('#content').html(new primaryView().render()); 
// ...and this. 
$('#content').html(new secondaryView().render()); 

該應用程序具有全局集合。

App.Collection(); 

輔助視圖根據全局集合修改自身。因此,它將函數綁定到視圖初始化函數中的App.Collection上的'add'事件';

App.Collection.bind('add', function(){ 
    console.log('Item added'); 
}); 

這導致我的問題。每次加載輔助視圖時,一個新函數綁定到App.Collection的add事件。如果我從主視圖轉到次視圖三次,則每次將項添加到App.Collection時,該函數將觸發三次。

我在做什麼錯? 我可以看到,如果在視圖上有一個未初始化函數,我會怎麼做。 我可以看到,如果我從未刪除視圖,一旦它被加載,我可以做到這一點。 我可以看到,如果我可以像Jquery中那樣命名空間事件,我該怎麼做。 (通過在綁定之前解除綁定)。

+1

剛剛找到了Derick Bailey的一篇文章。聽起來像一個體面的解決方案。 http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/ – janjarfalk 2012-02-20 15:37:08

回答

2

你可以概括一下你的問題。基本上,你正在編寫一個事件驅動的應用程序,在這樣的應用程序中,事件應該被照顧。

退房this post看到推薦的方式與骨幹事件處理工作。

0

根據不同的情況,你可以使用initializerender方法來處理創建視圖的不同方面。舉例來說,你可以把你的initialize

initialize: function() { 
    App.Collection.bind('add', function(){ 
    this.view.render() 
    }); 
} 
只火是創建視圖時

內結合。這將您的render方法綁定到add事件。然後在你的render方法中,你可以實際創建html。

這樣可以防止發生每當你需要重新渲染時間的結合。

+0

感謝您的回答@Masondesu,但我去德里克百利解決方案。我想完全消除我的觀點,所以他們不會佔用不必要的記憶。 – janjarfalk 2012-02-21 11:17:11