小菜毛毛技術分享

          與大家共同成長

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
          flex開發中將各個功能分解到模塊中,但在加載各個模塊的時候需要注意一下問題:
          加載方法:
          private function init():void
          {
          module = mx.modules.ModuleManager.getModule("UIModule/HR/Holiday/Config/frmHolidayMain.swf");
          module.addEventListener(mx.events.ModuleEvent.READY,ready);
          module.load();


          // general=ModuleLoader(mx.managers.PopUpManager.createPopUp(this,ModuleLoader));
          //
          //           general.url="test3.swf";
          //          
          //           general.loadModule();
          }
          private function ready(e:ModuleEvent):void
          {
          var moduleInfo:IModuleInfo = e.target as IModuleInfo
          var wind:MDIWindow = new MDIWindow();


          wind.addChild(moduleInfo.factory.create() as DisplayObject);


          testcanvas.windowManager.add(wind);

          }
          需要注意的一點是 module 對象的定義一定要定義為全局的否則ready事件是不能執行的。具體原因不知道,個人理解為到ready方法中無法找到module對象了


          flex 裝載多個module出現的問題Error #1034: 強制轉換類型失敗 收藏
          摘自http://bzhang.javaeye.com/blog/322148
          TypeError: Error #1034: 強制轉換類型失敗:無法將 Object@1aee90b1 轉換為 mx.messaging.messages.IMessage。


          需求背景 :
          通過樹形菜單加載多個不同的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 鉤子 閱讀(1118) 評論(1)  編輯  收藏 所屬分類: jee 、ria 、工作筆記

          <noscript type="text/javascript"> //<![CDATA[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1')); Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90); //]]> </noscript>
          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().

          在這里做個小記。

          http://blog.csdn.net/yzsind/archive/2009/03/27/4031066.aspx
          posted on 2009-08-18 17:31 小菜毛毛 閱讀(2695) 評論(0)  編輯  收藏 所屬分類: FLEX
          主站蜘蛛池模板: 仪陇县| 洪雅县| 清丰县| 高密市| 新龙县| 全南县| 东光县| 比如县| 巫溪县| 沙田区| 郑州市| 盐山县| 鹿泉市| 阿巴嘎旗| 乐亭县| 蒙阴县| 临澧县| 泽库县| 阜康市| 济阳县| 滨海县| 太康县| 旌德县| 长子县| 盐城市| 根河市| 勃利县| 乡宁县| 南华县| 三台县| 永顺县| 土默特右旗| 广南县| 杭州市| 庄河市| 汶川县| 哈密市| 宿迁市| 蓬莱市| 禄劝| 都昌县|