在一个swf中,组件间的交互通信可以直接使用addEventListener和dispatchEvent来完成事件的传递。当然这样的标准做法也适用于Module。通过addEventListener和dispatchEvent在Module发布事件:
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="onComplete()">
<mx:Script>
<![CDATA[
import mx.events.DynamicEvent;
[Bindable]private var command:String="";
private function onComplete():void
{
//从Application订阅
var sharedEventDispatcher:IEventDispatcher=systemManager.loaderInfo.sharedEvents;
sharedEventDispatcher.addEventListener("init",onInit,false,0,true);
//通知Application:Module创建完成
sharedEventDispatcher.dispatchEvent(new Event(Event.COMPLETE));
}
private function onInit(event:DynamicEvent):void
{
command=event.data as String;
}
]]>
</mx:Script>
<mx:Panel id="panel" title="Module With Events. {command}" width="400" height="200"/>
</mx:Module>
systemManager.loaderInfo.sharedEvents 这个东西挺好的
Application的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600">
<mx:Script>
<![CDATA[
import mx.events.DynamicEvent;
private const MODULE_URL:String="com/st/model/MyModule.swf";
[Bindable] private var moduleLoaded:Boolean;
private function loadModule():void
{
moduleLoader.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
var sharedEventDispatcher:IEventDispatcher = moduleLoader.loaderInfo.sharedEvents;
sharedEventDispatcher.addEventListener(Event.COMPLETE, onModuleCreated);
moduleLoader.loadModule(MODULE_URL);
moduleLoaded = true;
}
private function onModuleCreated(event:Event):void
{
var sharedEventDispatcher:IEventDispatcher = moduleLoader.loaderInfo.sharedEvents;
var dynamicEvent:DynamicEvent = new DynamicEvent("init");
dynamicEvent.data = "Test Title!";
sharedEventDispatcher.dispatchEvent(dynamicEvent);
}
private function unloadModule():void
{
moduleLoader.unloadModule();
moduleLoader.url = null;
moduleLoaded = false;
}
]]>
</mx:Script>
<mx:HBox>
<mx:Button label="Load Module" click="loadModule()"/>
<mx:Button label="Unload Module" click="unloadModule()" enabled="{moduleLoaded}"/>
</mx:HBox>
<mx:ModuleLoader id="moduleLoader" y="30" />
</mx:Application>