Flex load modules READY 事件不觸發問題

在使用ModuleLoader加載器;和使用ModuleManager進行加載flex模塊時,必須要把對應的變量定義爲全局變量, 否則其READY事件不會觸發。

      參考過很多資料, 歸其根本是由於在加載器調用了load方法後, 如果變量未定義爲全局變量,那麼可能被flxe的gc機制給卸載掉,也即根本的解決方法是不然加載器被gc,即要使用時必須留有應用。由於開始沒明白其中道理,犯了個錯誤。如代碼:

Java代碼  收藏代碼
  1. public class TaskLoadModule  
  2.     {  
  3.         public function TaskLoadModule()  
  4.         {  
  5.             super();  
  6.         }  
  7.         protected var moduleInfo:IModuleInfo  
  8.         public function loadFromLocal($local:String):void{  
  9.             moduleInfo = ModuleManager.getModule(local);  
  10.             moduleInfo.addEventListener(ModuleEvent.READY,moduleInfoReadyHandler);  
  11.             moduleInfo.addEventListener(ModuleEvent.ERROR,moduleInfoErrorHandler);  
  12.             moduleInfo.addEventListener(ModuleEvent.PROGRESS,moduleProgressHandler);  
  13.             trace('Module start load');  
  14.             moduleInfo.load();  
  15.         }  
  16.         public function moduleProgressHandler($e:ModuleEvent):void{  
  17.             trace('Module load progress: '+$e.bytesLoaded+" / "+$e.bytesTotal);  
  18.         }  
  19.         public function moduleInfoReadyHandler($e:ModuleEvent):void{  
  20.             trace('Module load ready: '+local);  
  21.         }  
  22.         public function moduleInfoErrorHandler($e:ModuleEvent):void{  
  23.             trace($e.errorText);  
  24.         }  
  25.     }  

 

    如上定義的moduleInfo在類中確實爲全局變量,但是我在頁面中引用的代碼卻是如下:

   

Java代碼  收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                        xmlns:s="library://ns.adobe.com/flex/spark"     
  4.                        xmlns:mx="library://ns.adobe.com/flex/mx"  >  
  5.     <fx:Script>  
  6.         <![CDATA[  
  7.   
  8.             protected function button1_clickHandler(event:MouseEvent):void  
  9.             {  
  10.                 var load:TaskLoadModule=new TaskLoadModule();  
  11.                 load.load("module/TestModule.swf",null);  
  12.             }  
  13.   
  14.         ]]>  
  15.     </fx:Script>  
  16.     <s:Button x="205" y="0" label="按鈕" click="button1_clickHandler(event)"  />  
  17. </s:WindowedApplication>  

    這樣就出現了,在click事件執行完成後,TaskLoadModule也會被gc,相應的moduleInfo也被gc掉了,所以一直未觸發moduleInfo的Ready事件。

發佈了115 篇原創文章 · 獲贊 5 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章