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 首頁 新隨筆 聯系 聚合 管理
            19 Posts :: 10 Stories :: 25 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(4)

          隨筆分類(34)

          隨筆檔案(30)

          收藏夾(10)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          需求背景
          通過樹形菜單加載多個不同的module。
          問題現象:module頁面存在拖動,Popup,Alert或者colorpicker出現錯誤信息:
          TypeError: Error #1034: 強制轉換類型失敗:無法將 mx.managers::PopUpManagerImpl@7155ac1 轉換為 mx.managers.IPopUpManager。
          解決方案
          在Application加入如下代碼引用:
              <mx:Script>
                  
          <![CDATA[
                      
          import mx.managers.DragManager;
                      
          import mx.managers.IPopUpManager;            
                      
                      
          /* Create dummy variables. */
                      
          //避免出現:無法將 mx.managers::PopUpManagerImpl@52a09a1 轉換為 mx.managers.IPopUpManager 錯誤
                      private var dragManager : DragManager;
                      
          private var popUpManager : IPopUpManager;
                    
                      //process....

                  ]]>
              </mx:Script>
          問題原因分析
          屬于ModuleLoader shared code problem.
          當Module中使用managers時(如PopUpManager,DragManager, HistoryManager等)則可能出現這個問題(當application里在loader之前沒有引入這些manager的引用時)。
          manager的方法是靜態方法,整個應用程序中創建了一個該manager接口的singleton實例,但module僅在自己的Application domain中使用該單例, 當多個module使用同一個單例manager且main application沒有使用時,就會出現這個空對象引用問題:第一個引入某manager的module不能將該manager接口的singleton跟其他module共享,其他module調用該Manager的方法時,應用程序不會再創建該manager接口的實例,這個module就無法引用到該manager接口的實例,就出現了空對象引用問題.
          參考資料:Flex sdk源碼。

          目前在Application創建了些Application范圍內沒有使用到的"木偶變量",從代碼可讀性上來說不是很好。有其他比較好的解決方案的同學麻煩請告之下,:)


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

          Feedback

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

          在這里做個小記。  回復  更多評論
            

          主站蜘蛛池模板: 泽普县| 梨树县| 宜宾市| 鄯善县| 晋州市| 永福县| 左云县| 西平县| 南宁市| 布尔津县| 大港区| 海城市| 榆社县| 旌德县| 稷山县| 鄂托克旗| 阜新市| 无为县| 滦平县| 天水市| 阿克陶县| 会同县| 扎鲁特旗| 甘泉县| 丰城市| 临洮县| 镇赉县| 彭州市| 印江| 丽水市| 巴青县| 页游| 万安县| 巴塘县| 调兵山市| 福鼎市| 云浮市| 蓝田县| 南和县| 长白| 和平区|