You smiled and talked to me of nothing and I felt that for this I had been waiting long.

          The trees come up to my window like the yearning voice of the dumb earth.

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            19 Posts :: 10 Stories :: 25 Comments :: 0 Trackbacks
          需求背景
          通過(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)題原因分析
          屬于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)告之下,:)


          posted on 2008-11-22 17:33 鉤子 閱讀(10485) 評(píng)論(1)  編輯  收藏 所屬分類: jeeria工作筆記

          Feedback

          # re: FLEX:multiple moduleloader occur #1034 error 2008-11-24 10:14 鉤子
          同事推薦了個(gè)更好的辦法:
          在ModuleLoader 的creationComplete方法中加入如下代碼:
          moduleLoader.applicationDomain = ApplicationDomain.currentDomain;
          就可以在Application里切換多個(gè)module而不需要在Application里明文引用單例manager聲明。比我上面所說(shuō)的方法更好的能解決問(wèn)題而且,代碼可讀性更好。
          另外,推薦在moduleloader做切換的時(shí)候,加上:
          moduleLoader.unloadModule再做moduleLoader.loadModule().

          在這里做個(gè)小記。  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 北辰区| 云林县| 天柱县| 平度市| 嵊泗县| 都安| 正阳县| 桃园县| 肇东市| 平原县| 琼结县| 石河子市| 锡林浩特市| 莱州市| 巴南区| 郴州市| 玉山县| 泰和县| 多伦县| 延长县| 石阡县| 连云港市| 突泉县| 水城县| 密山市| 安宁市| 铁岭市| 天水市| 武陟县| 武功县| 商城县| 乌兰县| 连城县| 黄石市| 博乐市| 深水埗区| 施秉县| 凯里市| 县级市| 德钦县| 泸水县|