自從
flex3
開始就加入了
module
。在工程中使用
module
可以減少生成的
swf的大小,或者可以動態新增系統的功能。使用起來非常方便,相對於使用
swfloader
,moduleloader
用起來更加方便。
在使用moduleloader
和module
時總會遇到在載入
module
時傳遞引數的情況,前幾天「一定搞定啥」老兄問了我這個問題,當時我給了他乙個思路,就是自定義乙個可以傳遞引數的事件,在
module
中進行這個事件的監聽,需要傳遞引數時使用
moduleloader.child.dispatchevent(event)
這種方法來進行引數傳遞。當時我試了一下還是挺好用的。但是有乙個前提就是
module
必須是已經載入完成並且初始化完成之後。如果
module
是動態載入的,需要在初始化完成之後就得到引數就比較困難了。
起初我想在
moduleloader
的ready
事件中向
child
派發事件,以為
ready
事件觸發時應該是
module
已經載入成功之後了。遺憾的是這種方法並不好用,我想原因應該是這樣: 在
ready
事件發生時,
module
是載入成功了,但是載入成功並不意味著初始化完成,事實證明此時
module
的swf
還未初始化完成,用
settimeout
函式測試發現
ready
事件發生之後大約一秒鐘之後
module
才會響應外部派發的事件,這個時間會因為處理器的處理速度不同而不同,所以用
settimeout
只是乙個最爛的點子。
後來我有乙個思路,就是在
module
初始化成功後,告訴
moduleloader
我已經初始化成功了,把引數傳給我吧,於是
moduleloader
就把引數傳給
module
。很簡單的乙個對話模型,不過在原有控制項基礎上實現就很困難,所以需要擴充套件一下
module
和moduleloader
,把需要對話的機制加進去才可以。
其工作原理圖:
首先自定義乙個
event
類,這個類裡新增乙個成員變數來傳遞引數:
然後擴充套件
module
,建立乙個
module
的子類命名為
mymodule
,在這個類中宣告乙個事件,派發時機是
module
的creation_complete
事件發生後,目的是便於
moduleloader
監聽這個事件,實現對話的第一步。另外在
module
的建構函式中註冊乙個對
myevent
事件的listener
來監聽引數傳遞事件。
**如下:
最後擴充套件一下
moduleloader
,定義乙個
moduleloader
的子類mymoduleloader
。在moduleloader
的ready
事件中為
moduleloader
的child
註冊乙個
ready0
事件的監聽,並且在
unload
的事件中去掉監聽。新增了乙個新函式
loadmoduleparam
,這個函式可以帶乙個字串型別的引數。
在使用時,所有的
module
必須繼承與
mymodule
,畫面上的控制項也要使用
mymoduleloader
,兩者配合使用才可以。載入
module
是必須使用
loadmoduleparam
函式。
mymodule
的子類如果要得到引數還必須覆蓋一下父類中的
myeventaction
函式:
這樣就ok
了。測試了一下還是很好用的。
這個例子使用
flashbuilder4
完成的,使用時請注意版本。
Module載入時出現的問題
在載入多個module時出現了型別轉換展示,資訊如下 typeerror error 1034 強制轉換型別失敗 無法將 mx.managers dragmanagerimpl 3a37291 轉換為 mx.managers.idragmanager。從google上搜尋的結果 兩個解決方案的文章,...
spring mvc 重定向時引數傳遞
實現登入後跳轉到登入前頁面時,發現用model.addattribute 再redirect,跳轉後url會附上引數。如 model.addattribute msg 使用者名稱或密碼錯誤 跳轉後會是 位址?msg 使用者名稱或密碼錯誤 若想去掉,可以使用redirectattributes的add...
呼叫方法時引數的傳遞
呼叫方法時,傳遞給方法的變數如果是基本型別,傳入到方法中後就是該方法的區域性變數,在呼叫時會在記憶體中開闢新的空間去儲存,所以對於引數名與成員變數一致的情況下,方法中改變的變數的值是與成員變數不衝突的,也就是不會影響到成員變數,除非使用this關鍵字來指向成員變數!下面是 示例 public cla...