Flex Modules通訊方式有很多種:通過繼續介面、參數傳遞、定義事件通訊。這裡討論通過繼續介面通訊。模組是獨立,通過繼承介面,允許外部應用程式與他們通訊。
首先,定義介面ICommunicaton.as:
1: package
2: {
3: public interface ICommunication
4: {
5: function getMessage():String;
6:
7: function setMessage(value:String):void;
8: }
9: }
建立Module繼承ICommunicaton介面:
1: <?xml version="1.0" encoding="utf-8"?>
2: <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" implements="ICommunication" >
3: <mx:Script>
4: <![CDATA[
5: [Bindable]private var _value:String="";
6:
7: public function setMessage(value:String):void
8: {
9: _value=value;
10: }
11:
12: public function getMessage():String
13: {
14: return _value;
15: }
16: ]]>
17: </mx:Script>
18:
19: <mx:Panel id="panel" title="Message :{_value}" width="400" height="200"/>
20: </mx:Module>
21:
在Application通過ICommunication調用Module的方法:
1: var communication:ICommunication=moduleLoader.child as ICommunication;
2: communication.setMessage("loaded by application");
Application的代碼:
1: <?xml version="1.0" encoding="utf-8"?>
2: <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3: <mx:Script>
4: <![CDATA[
5: import mx.containers.Panel;
6: import mx.modules.Module;
7:
8: private const MODULE_URL:String="Module1.swf";
9:
10: private function onModifyMessage():void
11: {
12: var communication:ICommunication=moduleLoader.child as ICommunication;
13: communication.setMessage("loaded by application");
14:
15: var module:Module = moduleLoader.child as Module;
16: var panel:Panel=module.getChildByName("panel") as Panel;
17: trace(panel.title);
18:
19: }
20: ]]>
21: </mx:Script>
22:
23: <mx:HBox>
24: <mx:Button id="btnLoad" label="Load Module" click="moduleLoader.loadModule(MODULE_URL)" />
25: <mx:Button id="btnModify" label="Modify Module" click="onModifyMessage()"/>
26: <mx:Button label="Unload Module" click="moduleLoader.unloadModule()" />
27: </mx:HBox>
28: <mx:ModuleLoader id="moduleLoader" y="30"/>
29: </mx:Application>
30:
運行結果,載入後點擊Modify Module:
注意:雖然使用繼承介面實現Application和Modules通訊很方便,實現介面就可以,但是在調用Modules方法是會鎖定Modules記憶體,使用時得注意。