需求背景:
通過(guò)樹(shù)形菜單加載多個(gè)不同的module。
問(wèn)題現(xiàn)象:module頁(yè)面存在拖動(dòng),Popup,Alert或者colorpicker出現(xiàn)錯(cuò)誤信息:
TypeError: Error #1034: 強(qiáng)制轉(zhuǎn)換類型失敗:無(wú)法將 mx.managers::PopUpManagerImpl@7155ac1 轉(zhuǎn)換為 mx.managers.IPopUpManager。
解決方案:
在Application加入如下代碼引用:
屬于ModuleLoader shared code problem.
當(dāng)Module中使用managers時(shí)(如PopUpManager,DragManager, HistoryManager等)則可能出現(xiàn)這個(gè)問(wèn)題(當(dāng)application里在loader之前沒(méi)有引入這些manager的引用時(shí))。
manager的方法是靜態(tài)方法,整個(gè)應(yīng)用程序中創(chuàng)建了一個(gè)該manager接口的singleton實(shí)例,但module僅在自己的Application domain中使用該單例, 當(dāng)多個(gè)module使用同一個(gè)單例manager且main application沒(méi)有使用時(shí),就會(huì)出現(xiàn)這個(gè)空對(duì)象引用問(wèn)題:第一個(gè)引入某manager的module不能將該manager接口的singleton跟其他module共享,其他module調(diào)用該Manager的方法時(shí),應(yīng)用程序不會(huì)再創(chuàng)建該manager接口的實(shí)例,這個(gè)module就無(wú)法引用到該manager接口的實(shí)例,就出現(xiàn)了空對(duì)象引用問(wèn)題.
參考資料:Flex sdk源碼。
目前在Application創(chuàng)建了些Application范圍內(nèi)沒(méi)有使用到的"木偶變量",從代碼可讀性上來(lái)說(shuō)不是很好。有其他比較好的解決方案的同學(xué)麻煩請(qǐng)告之下,:)
通過(guò)樹(shù)形菜單加載多個(gè)不同的module。
問(wèn)題現(xiàn)象:module頁(yè)面存在拖動(dòng),Popup,Alert或者colorpicker出現(xiàn)錯(cuò)誤信息:
TypeError: Error #1034: 強(qiáng)制轉(zhuǎn)換類型失敗:無(wú)法將 mx.managers::PopUpManagerImpl@7155ac1 轉(zhuǎn)換為 mx.managers.IPopUpManager。
解決方案:
在Application加入如下代碼引用:
<mx:Script>
<![CDATA[
import mx.managers.DragManager;
import mx.managers.IPopUpManager;
/* Create dummy variables. */
//避免出現(xiàn):無(wú)法將 mx.managers::PopUpManagerImpl@52a09a1 轉(zhuǎn)換為 mx.managers.IPopUpManager 錯(cuò)誤
private var dragManager : DragManager;
private var popUpManager : IPopUpManager;
//process....
]]>
</mx:Script>
問(wèn)題原因分析:<![CDATA[
import mx.managers.DragManager;
import mx.managers.IPopUpManager;
/* Create dummy variables. */
//避免出現(xiàn):無(wú)法將 mx.managers::PopUpManagerImpl@52a09a1 轉(zhuǎn)換為 mx.managers.IPopUpManager 錯(cuò)誤
private var dragManager : DragManager;
private var popUpManager : IPopUpManager;
//process....
]]>
</mx:Script>
屬于ModuleLoader shared code problem.
當(dāng)Module中使用managers時(shí)(如PopUpManager,DragManager, HistoryManager等)則可能出現(xiàn)這個(gè)問(wèn)題(當(dāng)application里在loader之前沒(méi)有引入這些manager的引用時(shí))。
manager的方法是靜態(tài)方法,整個(gè)應(yīng)用程序中創(chuàng)建了一個(gè)該manager接口的singleton實(shí)例,但module僅在自己的Application domain中使用該單例, 當(dāng)多個(gè)module使用同一個(gè)單例manager且main application沒(méi)有使用時(shí),就會(huì)出現(xiàn)這個(gè)空對(duì)象引用問(wèn)題:第一個(gè)引入某manager的module不能將該manager接口的singleton跟其他module共享,其他module調(diào)用該Manager的方法時(shí),應(yīng)用程序不會(huì)再創(chuàng)建該manager接口的實(shí)例,這個(gè)module就無(wú)法引用到該manager接口的實(shí)例,就出現(xiàn)了空對(duì)象引用問(wèn)題.
參考資料:Flex sdk源碼。
目前在Application創(chuàng)建了些Application范圍內(nèi)沒(méi)有使用到的"木偶變量",從代碼可讀性上來(lái)說(shuō)不是很好。有其他比較好的解決方案的同學(xué)麻煩請(qǐng)告之下,:)