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
          需求背景
          通過樹形菜單加載多個不同的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 鉤子 閱讀(10479) 評論(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().

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

          主站蜘蛛池模板: 盖州市| 湟源县| 黄浦区| 凌源市| 南安市| 宕昌县| 南召县| 精河县| 苏州市| 武穴市| 福海县| 依安县| 天台县| 浦江县| 孝感市| 洞口县| 东方市| 鹰潭市| 南汇区| 察哈| 六枝特区| 武安市| 石景山区| 平罗县| 黔西县| 乳山市| 宜兰县| 新邵县| 正宁县| 广宁县| 基隆市| 龙口市| 吐鲁番市| 洪湖市| 长武县| 民和| 姜堰市| 马鞍山市| 邵阳县| 襄城县| 德令哈市|