我在我的Backbone應用程序中有一個電子郵件視圖。它目前在我的控制器的view
操作中實例化。它去有點像這樣:更改視圖的模型時,更換模型還是創建新視圖會更好?
routes: {
'email/:id': email
},
//...
email: function (id) {
var email = new Email({
id: id
});
this.emailView = new EmailView({
model: email
});
email.fetch();
}
現在的問題是,如果我訪問一個郵件,然後另一個,我結束了創建兩個單獨的EmailView
秒。這意味着,例如,EmailView
中的刪除鏈接綁定到兩個單獨的Email
模型,因此單擊刪除將刪除這兩個(不是一件好事)。
我正在尋找兩種解決方案。在一個,我會緩存EmailView
,並更新其模型。然後問題是我不得不重新綁定中的events
。
另一種解決方案是創建一個新的EmailView
,就像我現在一樣,但在替換之前解除舊的EmailView.el
的事件。
我對此有何看法?有沒有更好的方法來處理這種情況?提前歡呼。
唯一的問題是,它不只是扔掉舊的EmailView的簡單情況。 DOM監聽器沒有被綁定,所以它們阻止舊視圖被垃圾收集。然後,當有人點擊「刪除」時,所有舊的電子郵件視圖都會收到。我認爲答案是在替換電子郵件視圖之前手動取消綁定這些偵聽器。 – Skilldrick
你讓我擔心我現在的代碼; – bradgonesurfing
看看jquery :: remove的文檔。 http://api.jquery.com/remove/哪個Backbone.js調用。事件處理程序會爲視圖的所有子元素自動收集垃圾。您仍然需要從模型綁定中分離,並綁定到其他視圖。但綁定到其他視圖是不好的。查看到查看事件應通過模型觸發。 – bradgonesurfing