对于一个较大型的Flex RIA应用,生成的 swf文件的体积必然不会小, 在中国这样艰苦的网络环境下面,不得不考虑如何让用户减少等待的时间. 这样就需要把一个大的Flex程序分成各个不同的功能部件, 每个Module单独编译成一个 SWF ,需要的时间,再动态的加载调用.减小主程序的体积.
具体的做法是:
使用 mx.modules.ModuleLoader 可以进行Module动态加载.
主程序:
- <?xml version="1.0"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
- <mx:Button label="Load a Module" click="go();"/>
- <mx:Button label="Call the Module" click="callModule()"/>
- <mx:Script>
- <![CDATA[
- import mx.modules.ModuleLoader;
- import mx.events.IndexChangedEvent;
- import MsgManager;
- private var ld:ModuleLoader;
- public function go():void
- {
- ld = new ModuleLoader();//初始化ModuleLoader...
- ld.url = 'MsgManager.swf';//注意是编译完成之后的URL 即SWF文件 (设置URL值即可完成Load)
- this.addChild(ld);
- }
- public function callModule():void
- {
- this.dispatchEvent(new Event('PT'));//向自己派发 事件 ,调用MsgManager中的函数
- }
- public var na:String = 'Parent';//此属性用来测试子Module的调用
- ]]>
- </mx:Script>
- </mx:Application>
如下为MsgManager模块代码,将会被动态加载
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" backgroundColor="#49B917" creationComplete="init()">
- <mx:Button x="84" y="51" label="Click Me" click="go()"/>
- <mx:Label x="84" y="143" text="msglable" width="146" id="msglable"/>
- <mx:Script>
- <![CDATA[
- public function init():void
- {
- this.parent.parent.addEventListener('PT',otherCallMe);//初始化添加事件侦听 注意对象是 parent.parent 因为还有一个moduleloader对象
- }
- public function go():void
- {
- this.msglable.text = 'Self Call Self';
- }
- public function otherCallMe(evt:Event):void//事件函数,将被parent.parent调用
- {
- this.msglable.text = 'Main Program Call Me! parent name ='+evt.target.na;//读取父属性 当然也可以是函数咯
- }
- ]]>
- </mx:Script>
- </mx:Module>
-
浙公网安备 33010602011771号