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 鉤子 閱讀(10478) 評論(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().

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

          主站蜘蛛池模板: 玉溪市| 荣成市| 天祝| 合山市| 大庆市| 凯里市| 天气| 南漳县| 宣威市| 平山县| 三门峡市| 永新县| 临湘市| 陇南市| 青海省| 东宁县| 本溪市| 富阳市| 铜山县| 买车| 清水河县| 宁城县| 克东县| 彭水| 贵南县| 英山县| 濮阳市| 镇江市| 调兵山市| 鲜城| 福州市| 礼泉县| 卓资县| 六枝特区| 彭州市| 抚顺县| 正阳县| 习水县| 尉犁县| 永年县| 静乐县|