柳生飘絮 SupperSdr

知识在于积累
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在Flex程序中动态加载模块

Posted on 2009-05-27 17:29  柳生飘絮  阅读(918)  评论(0)    收藏  举报

对于一个较大型的Flex RIA应用,生成的 swf文件的体积必然不会小, 在中国这样艰苦的网络环境下面,不得不考虑如何让用户减少等待的时间. 这样就需要把一个大的Flex程序分成各个不同的功能部件, 每个Module单独编译成一个 SWF ,需要的时间,再动态的加载调用.减小主程序的体积.

具体的做法是:

     使用 mx.modules.ModuleLoader 可以进行Module动态加载.

主程序:

  1.   
  2. <?xml version="1.0"?>   
  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">   
  4.   <mx:Button label="Load a Module" click="go();"/>   
  5.   <mx:Button label="Call the Module" click="callModule()"/>   
  6. <mx:Script>   
  7.   <![CDATA[   
  8.     import mx.modules.ModuleLoader;   
  9.     import mx.events.IndexChangedEvent;   
  10.     import MsgManager;   
  11.     private var ld:ModuleLoader;   
  12.     public function go():void  
  13.     {   
  14.       ld = new ModuleLoader();//初始化ModuleLoader...   
  15.       ld.url = 'MsgManager.swf';//注意是编译完成之后的URL  即SWF文件 (设置URL值即可完成Load)   
  16.       this.addChild(ld);   
  17.     }   
  18.     public function callModule():void  
  19.     {   
  20.       this.dispatchEvent(new Event('PT'));//向自己派发 事件 ,调用MsgManager中的函数   
  21.     }   
  22.     public var na:String = 'Parent';//此属性用来测试子Module的调用   
  23.   ]]>   
  24. </mx:Script>   
  25. </mx:Application>   
  26.   

如下为MsgManager模块代码,将会被动态加载

 
  1.   
  2. <?xml version="1.0" encoding="utf-8"?>   
  3. <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" backgroundColor="#49B917" creationComplete="init()">   
  4.   <mx:Button x="84" y="51" label="Click Me" click="go()"/>   
  5.   <mx:Label x="84" y="143" text="msglable" width="146" id="msglable"/>   
  6.   <mx:Script>   
  7.     <![CDATA[   
  8.       public function init():void  
  9.       {   
  10.         this.parent.parent.addEventListener('PT',otherCallMe);//初始化添加事件侦听 注意对象是  parent.parent 因为还有一个moduleloader对象   
  11.       }   
  12.       public function go():void  
  13.       {   
  14.         this.msglable.text = 'Self Call Self';   
  15.       }   
  16.       public function otherCallMe(evt:Event):void//事件函数,将被parent.parent调用   
  17.       {   
  18.         this.msglable.text = 'Main Program Call Me! parent name ='+evt.target.na;//读取父属性 当然也可以是函数咯   
  19.       }   
  20.     ]]>   
  21.   </mx:Script>   
  22. </mx:Module>   
  23.