複製從一個有趣的blog post,我最近讀的提取物。希望能幫助到你。
避免常見的陷阱骨幹:通過不解除綁定事件
在Backbone.js的一個常見的模式是創建在模型或集合變化聽取意見創建內存泄漏。此技術通常旨在允許視圖在底層數據更改時自動重新呈現自身。這也意味着對於大型集合,我們可能會得到許多視圖(對於集合中的每個模型至少有一個視圖),我們可能會根據數據更改動態創建或銷燬該視圖。
,就會出現問題,當我們刪除一個視圖(通常是通過調用一個.remove()方法),但忘記解綁在模型更改監聽的方法。在這種情況下,儘管我們的代碼可能不再持有對該視圖的引用,但它永遠不會被垃圾回收,因爲模型仍然通過事件處理程序持有這樣的引用。
持這種觀點,例如:
var SomeModelView = Backbone.View.extend({
initialize: function() {
this.model.on('change', this.render, this);
},
render: function() {
// render a template
}
});
當調用一個.remove()方法,「變」的事件處理程序(我們的渲染功能)仍難免。所以雖然DOM元素可能被移除,但視圖對象本身永遠不會從內存中釋放。
解決這個容易(尤其是骨幹0.9.x版本) - 所有我們需要做的是停止使用。對綁定的事件處理程序()。相反,我們可以使用新的.listenTo()方法,像這樣:
initialize: function() {
this.listenTo(this.model, 'change', this.render);
}
最大的區別就在這裏是在從模型到視圖責任的轉變。這意味着只要我們稱之爲一個.remove(),該視圖將自動解除綁定結合使用它的.listenTo()方法,本質上解決這個共同泄漏到的任何事件。
一些相關的討論在[這個問題](http://stackoverflow.com/questions/14041042/backbone-0-9-9-difference-between-listento-and-on) – explunit 2013-03-26 19:37:39