Module元件
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="module1_creationCompleteHandler(event)"
xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="400" height="300">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.events.DynamicEvent;
[Bindable]private var command:String="";
protected function module1_creationCompleteHandler(event:FlexEvent):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;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可視元素(例如服務、值對象)放在此處 -->
</fx:Declarations>
<mx:Panel id="panel" title="Module With Events. {command}" width="400" height="200"/>
</mx:Module>
主檔案
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">
<mx:Script>
<![CDATA[
import mx.events.DynamicEvent;
import mx.controls.Alert;
import mx.events.ModuleEvent;
import mx.modules.Module;
private const MODULE_URL:String="dcec/ModuleWithEvents.swf";
[Bindable]
private var moduleLoaded:Boolean;
private function loadModule():void
{
//從Module訂閱通知
var sharedEventDispatcher:IEventDispatcher=moduleLoader.loaderInfo.sharedEvents;
sharedEventDispatcher.addEventListener(Event.COMPLETE, onModuleCreated);
moduleLoader.loadModule(MODULE_URL);
moduleLoaded=true;
}
private function onModuleCreated(event:Event):void
{
trace("Module CreateComplete happened");
//發送指令到Module
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();
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>
另外,通過接口通信,見下面
定義接口
package dcec
{
public interface ICommunication
{
function getMessage():String;
function setMessage(value:String):void;
}
}
定義子產品
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
implements="dcec.ICommunication">
<mx:Script>
<![CDATA[
[Bindable]
private var _value:String="";
public function setMessage(value:String):void
{
_value=value;
}
public function getMessage():String
{
return _value;
}
]]>
</mx:Script>
<mx:Panel id="panel"
title="Message :{_value}"
width="400"
height="200"/>
</mx:Module>
主檔案
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955"
minHeight="600">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import dcec.ICommunication;
import mx.containers.Panel;
import mx.modules.Module;
private const MODULE_URL:String="dcec/Module1.swf";
private function onModifyMessage():void
{
var communication:ICommunication=moduleLoader.child as ICommunication;
communication.setMessage("loaded by application");
var module:Module=moduleLoader.child as Module;
var panel:Panel=module.getChildByName("panel") as Panel;
trace(panel.title);
}
]]>
</fx:Script>
<mx:HBox>
<mx:Button id="btnLoad" label="Load Module" click="moduleLoader.loadModule(MODULE_URL)"/>
<mx:Button id="btnModify" label="Modify Module" click="onModifyMessage()"/>
<mx:Button label="Unload Module" click="moduleLoader.unloadModule()"/>
</mx:HBox>
<mx:ModuleLoader id="moduleLoader" y="30"/>
</s:Application>