天天看點

Flex中ModuleManager的一個bug

估且認為它是一個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了

示例項目工程的目錄很簡單:

Flex中ModuleManager的一個bug

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

繼續閱讀