2014-12-23 51 views
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翻譯這個。

回答

1

要調用該破壞方法,木偶控制器在其原型定義的「緊密」的方法:

controller.close(); 

被調用的方法是onClose

有關的信息,您可以在控制檯檢查:

enter image description here

+0

感謝您的幫助!我改成了controller.close(),這的確關閉它,但它仍然在內存中做一個堆快照時.. – gjunkie

+1

是否有可能在控制器中揮之不去的事件監聽器?如果使用「on」,則在onClose方法中調用「off」。使用listenTo時,可以使用stopListening。除此之外,對象應該清理乾淨。清理完全發生時是垃圾收集器的決定,但通常您也可以執行手動清理。 (在Chrome中它是回收站圖標)。 – Trace

+0

那麼,控制器本身不具有任何事件偵聽器,但一些,這個控制器創建使用許多意見this.listenTo ......我已經銷燬的這些觀點,我認爲有一個問題可能是真實的問題在這裏。我應該在這個控制器創建的所有視圖上明確地聲明onClose - > this.stopListening()嗎? – gjunkie