0
我在摧毀一個木偶控制器的問題。我仍然包裹我的腦子各地木偶,更具體骨幹垃圾回收....Backbone.js的 - 銷燬木偶控制器
該控制器實例幾個觀點,其中的每一個可能有幾個綁定事件偵聽器。該代碼看起來是這樣的:
myController.js
---------------
Marionette = require('backbone.marionette');
MyView = require('path/to/myView');
var MyController = Marionette.Controller.extend({
initialize: function(options) {
console.log('init');
}
onDestroy: function() {
console.log('should be destroyed');
}
showData: function() {
console.log('create view');
myView = new MyView();
}
});
appController.js
----------------
MyController = require('path/to/myController');
var controller = new MyController()
controller.showData();
controller.destroy();
output:
//init
//create view
//should be destroyed
控制器仍然存在,即使做的onDestroy火..
難道這是一個享有仍然有綁定事件監聽器的問題嗎?如果代碼看起來很奇怪,我很抱歉...從coffeescript翻譯這個。
感謝您的幫助!我改成了controller.close(),這的確關閉它,但它仍然在內存中做一個堆快照時.. – gjunkie
是否有可能在控制器中揮之不去的事件監聽器?如果使用「on」,則在onClose方法中調用「off」。使用listenTo時,可以使用stopListening。除此之外,對象應該清理乾淨。清理完全發生時是垃圾收集器的決定,但通常您也可以執行手動清理。 (在Chrome中它是回收站圖標)。 – Trace
那麼,控制器本身不具有任何事件偵聽器,但一些,這個控制器創建使用許多意見this.listenTo ......我已經銷燬的這些觀點,我認爲有一個問題可能是真實的問題在這裏。我應該在這個控制器創建的所有視圖上明確地聲明onClose - > this.stopListening()嗎? – gjunkie