[flex4]一個moudleloader中重複加載不同的moudle報錯

[摘自: http://blog.csdn.net/blue_maple/article/details/5683033 ]

這屬於Module的共享代碼問題(shared code),
當Module中使用managers時(如PopUpManager,DragManager, HistoryManager)容易出現這個問題,
manager的方法都是靜態方法,整個應用程序中創建了一個該manager接口的singleton,
但module僅在自己的Application domain中使用該singleton, 當多個module使用同一個singleton且main
application沒有使用時,就會出現這個空對象引用問題:首先引入某manager的module不能將該manager接口的singleton跟其

他module共享,其他module調用該Manager的方法時,應用程序不會再創建該manager接口的實例,這個module就無法引用到該manager接口的實例,就出現了空對象引用問題,可以參考Flex的源碼。

默認情況下,Accordion和TabNavigator的 historyManagementEnabled =
true;而ViewStack的historyManagementEnabled = false;
所以使用TabNavigator和Accordion時要注意HistoryManager的共享代碼問題。另,僅一個module使用HistoryManager時,卸載之後又加載該module也會出現該問題,說明第二次加載時相當於一個新的module了。 

解決辦法:

Hello following code in your main application(將下面代碼加入到含有該moudleloader的主程序文件中):

        import mx.managers.*;
        private var _dragManager:DragManager;
        private var _historyManager:HistoryManager;
        private var _popupManager:PopUpManager;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章