估且認為它是一個bug吧,因為到目前為止還是沒想明白造成問題的原因。
在相對較為複雜或是多人協作的flex項目開發中,使用module進行開發是很平常的事情,而module的加載一般常用的有兩種方法:
1、使用ModuleLoader加載器;
2、使用ModuleManager進行加載;
使用ModuleLoader進行加載:
使用ModuleManager進行加載:
ModuleManager類負責管理加載的子產品,當将子產品的url傳遞到public的ModuleManager.getModule方法中時,則該子產品位置就添加到被管理子產品的清單中,并傳回一個mx.modules.IModuleInfo的執行個體。
ModuleInfo對象負責加載swf檔案,并被封裝成一個實作了IModuleInfo接口的代理類,由ModuleManager.getModule方法傳回,可以監聽代理類上的狀态事件,比如:ready、error、setup、progress事件等.
常量
字元串值
描述
PROGRESS
"progress"
加載子產品時被排程。可以用這個事件通路被加載子產品的bytesLoaded和bytesTotal屬性
SETUP
"setup"
當已加載了足夠的子產品内容時被排程
READY
"ready"
當子產品完成加載時被排程
UNLOAD
"unload"
當解除安裝子產品時被排程
ERROR
"error"
當子產品下載下傳過程中出錯時被排程
但我在寫實際的demo示例時,發現一個問題,如果沒有事先聲明IModuleInfo類的執行個體,在使用上面方面加載子產品時,第一次加載不會調用任何的方法。完成的示例代碼如下:
在上面例子中,事先已經聲明過了一個IModuleInfo類的執行個體,在加載時如果使用該執行個體進行加載則一切正常,如果不使用已經被聲明過的執行個體加載,則第一次加載時,不會有任何的反應,但使用ModuleLoader是沒有此問題的,是以我隻能認為這是一個bug了
示例項目工程的目錄很簡單:

如果想使用ModuleManager加載子產品,保險的方式就是先聲明一個IModuleInfo類的執行個體,然後使用該執行個體去加載子產品。兩種加載子產品的優先方法相比,一般更為常用的是第二種,因為可以預加載子產品,比較容易按不同的需求來控制子產品。