使用ModuleLoader载入模块
mx.modules.ModuleLoader类是一个容器类,功能类似于mx.controls.SWFLoader 组件。它载入SWF并把模块添加到应用程序的显示列表。ModuleLoader和SWFLoader不同之处在于它有一个约定,这个被载入的SWF须实现IFlexModuleFactory。被编译的模块包含IFlexModuleFactory类工厂,它允许应用程序在运行期间动态载入模块化SWF而不需要在主应用程序中实现此接口。
虽然ModuleLoader对象是一个可视的容器,可载入继承自Module和ModuleBase的模块,不依赖于这个模块是否包含有框架代码或可视对象。ModuleLoader的url属性指向一个模块的具体位置。设置url属性后,组件内部会调用loadModule方法,开始下载模块。
下面的例子在应用程序同一个域中载入模块:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> <mx:Panel title="Contacts:" width="350" height="180" horizontalAlign="center" verticalAlign="middle"> <mx:ModuleLoader url="ContactList.swf" /> </mx:Panel> </mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> <mx:Script> <![CDATA[ private function displayModule( moduleUrl:String ):void { var url:String = moduleLoader.url; if( url == moduleUrl ) return; if( url != null ) moduleLoader.unloadModule(); moduleLoader.url = moduleUrl; } private function showHandler():void { displayModule( "ContactList.swf" ); } private function enterHandler():void { displayModule( "ContactEntry.swf" ); } ]]> </mx:Script> <mx:Panel title="Contacts:" width="350" height="210" horizontalAlign="center" verticalAlign="middle"> <mx:ModuleLoader id="moduleLoader" height="110" /> <mx:HRule width="100%" /> <mx:HBox width="100%"> <mx:Button label="show list" click="showHandler();" /> <mx:Button label="enter contact" click="enterHandler();" /> </mx:HBox> </mx:Panel> </mx:Application>