我動態地創建我的應用程序控制器是這樣的:如何刪除控制器ExtJS?
var loadedController = me.app.getController(controller_name);
loadedController.init();
我如何使用後刪除此控制器? 謝謝。
我動態地創建我的應用程序控制器是這樣的:如何刪除控制器ExtJS?
var loadedController = me.app.getController(controller_name);
loadedController.init();
我如何使用後刪除此控制器? 謝謝。
ExtJs目前不支持從控制箱中刪除控制器。要清除控制器,請執行下列操作:
Ext.app.EventBus
與方法uncontrol
即註銷所有的事件監聽器,這個控制器上註冊EventBus。查看Ext.app.EventBus#control
的來源以推導出實現。或使用this one。removeController
擴展Ext.app.Application
,該方法從controllers
集合中刪除給定的控制器實例。這是一個Ext.util.MixedCollection,請查看Ext.app.Application#getController
的源代碼。然後使用uncontrol
清理該控制器的所有註冊偵聽器。destroy
方法和/或擴展Ext.app.Controller
。如果適合您的應用程序架構和控制器生命週期,您至少應該致電clearManagedListeners()
,並可能銷燬由此控制器創建的其他對象,如視圖或商店。您可以使用obj.destroy()
銷燬任何Ext類。 請記住還要刪除對象的所有引用,以便它可以被垃圾收集。
高級會員申請已在Sencha論壇上發起。不幸的是,最初的請求自8月以來一直沒有任何提及。我剛剛參考這個線索提到了這個請求。
getController()方法創建新的控制器對象和存儲參考它在controllers
陣列。
也就是說,如果控制器使用getController()加載,它將不會被刪除,因爲它總會有至少一個引用存儲在Application對象的controllers
屬性中。
要加載控制器,只要它失去對現有對象(DOM元素,Ext組件,視圖等)的引用,就會被銷燬(佔用內存),而應該使用Ext.create的getController()。
下面是代碼:
var loadedController = Ext.create(
me.app.getModuleClassName(controller_name, 'controller'),
{
application: me.app,
id: Ext.id(null, 'controller')
}
);
loadedController.init(me.app);
loadedController.onLaunch(me.app);
loadedController
將是局部變量,將範圍脫身。唯一會繼續將新創建的控制器綁定到「現實生活」的東西將是控制器自己創建的元素。
例如,控制器可以在他的onLaunch()方法中創建一個新視圖,該視圖將被注入到DOM中,並且控制器將使用其init()方法中的處理程序綁定來偵聽查看事件。只要視圖存在,控制器也會存在。但是當用戶關閉視圖時,視圖將被銷燬,因爲它是我們控制器的最後一個參考,控制器也將被銷燬。與控制器創建
UPDATE
監聽器被附加到Ext.app.EventBus並可以防止自動清除控制部,因爲它們也可以保持到該控制器的引用。
很好的答案,你深入挖掘主題:) –
好的答案!這應該放在功能要求sencha – sra
好的答案,你涵蓋了一切必須刪除:)如何測試如果控制器真的被刪除? – bhovhannes