Flex 4.6 中使用ActionScript 中载入模块的方法

  • 模块代码 

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Module xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.           xmlns:s="library://ns.adobe.com/flex/spark"   
  4.           xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">  
  5.     <fx:Declarations>  
  6.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  7.     </fx:Declarations>  
  8.     <s:Button label="按钮">  
  9.           
  10.     </s:Button>  
  11. </s:Module>  

有些文章说 不能 用

  1. s:Module  

只能用 

 

 

  1. mx:Module  

否则有未明错误发生。

 

我测试下来,在 flash builder 4.6 的版本下,不会产生错误。

 

 

  • 调用代码

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.                xmlns:s="library://ns.adobe.com/flex/spark"  
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="400" minHeight="300" applicationComplete="application1_applicationCompleteHandler(event)">  
  5.     <s:layout>  
  6.         <s:BasicLayout/>  
  7.     </s:layout>  
  8.       
  9.     <fx:Script>  
  10.         <![CDATA[  
  11.             import mx.core.IVisualElement;  
  12.             import mx.events.FlexEvent;  
  13.             import mx.events.ModuleEvent;  
  14.             import mx.modules.IModuleInfo;  
  15.             import mx.modules.ModuleManager;  
  16.             import mx.controls.Alert;  
  17.               
  18.             private var module:IModuleInfo;  
  19.             private var first:Boolean=true;//是否首次加载的判断标志  
  20.             private var moduleInstance:Object;//用于保存加载后的实例引用  
  21.               
  22.             protected function button1_clickHandler(event:MouseEvent):void  
  23.             {    
  24.                 //非首次加载(先卸载)  
  25.                 if (!first)  
  26.                 {  
  27.                     module.unload();  
  28.                     pnl.removeElement(moduleInstance as IVisualElement);  
  29.                 }  
  30.                 initModule();  
  31.                 module.load();   
  32.                 btn1.enabled = false;  
  33.             }  
  34.               
  35.             private function onModuleReady(e:ModuleEvent):void  
  36.             {                
  37.                 moduleInstance  = e.module.factory.create();//注:这里千万不能用as做任何的转型,否则就报null object reference错误,原因不明                 
  38.                 this.pnl.addElement(moduleInstance as IVisualElement);  
  39.                   
  40.             }  
  41.               
  42.             private function initModule():void  
  43.             {  
  44.                   
  45.                 module = ModuleManager.getModule("module1.swf");  
  46.                 module.addEventListener(ModuleEvent.READY,onModuleReady);    
  47.             }  
  48.               
  49.             //应用加载完成时,就预先将Module初始化(甚至这时就可以load,只是不显示而已,以改善用户体验)  
  50.             protected function application1_applicationCompleteHandler(event:FlexEvent):void  
  51.             {  
  52.                 initModule();  
  53.             }  
  54.               
  55.         ]]>  
  56.     </fx:Script>   
  57.       
  58.     <s:Panel id="pnl" title="动态加载Module" left="10" top="10" bottom="50" right="10"></s:Panel>  
  59.       
  60.     <s:Button click="button1_clickHandler(event)" label="load" horizontalCenter="0" bottom="10" id="btn1">  
  61.           
  62.     </s:Button>  
  63. </s:Application>  
posted @ 2012-02-18 13:39  张良  阅读(609)  评论(0编辑  收藏  举报