加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 利用ActionScript接口实现Module模块间的数据通信

发布时间:2020-12-15 04:14:30 所属栏目:百科 来源:网络整理
导读:Flex 利用ActionScript接口实现Module模块间的数据通信 http://353345996-qq-com.javaeye.com/blog/543139 在面向对象的编程中,我们讲要面向接口编程。面向接口的编程方式从一定程度上解决了相互关联的模块间的紧密耦合问题。以上提到的所有数据传输和共享

Flex 利用ActionScript接口实现Module模块间的数据通信

http://353345996-qq-com.javaeye.com/blog/543139
在面向对象的编程中,我们讲要面向接口编程。面向接口的编程方式从一定程度上解决了相互关联的模块间的紧密耦合问题。以上提到的所有数据传输和共享方式都在不同程度上导致了模块间的紧耦合。不过,Flex提供了一种利用标准的ActionScript接口实现Module模块间数据通信的方式。具体地说,对于Module模块对象和主应用Application对象间的通信,我们可以定义一个ActionScript接口,Module模块对象实现了这个接口中定义的方法和属性,那么主应用Application就可以访问这个接口中定义的属性和方法。接口中定义了Module模块对象和主应用Application需要共享的数据和方法,是两者间共同的一个契约,同时也实现了接口和实现的分离,达到了松耦合的目的。参考以下示例,主应用Application,?
?
<?xml?version="1.0"?>
<!--?modules/interfaceexample/Main.mxml?-->
<mx:Application?xmlns="*"?xmlns:mx=" http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
imp ort?mx.events.ModuleEvent;
imp ort?mx.modules.ModuleManager;
[Bindable]
public?var?selectedItem:Object;
[Bindable]
public?var?currentModuleName:String;
private?function?applyModuleSettings(e:Event):void?{
//?Cast?the?ModuleLoader's?child?to?the?interface.
//?This?child?is?an?instance?of?the?module.
//?You?can?now?call?methods?on?that?instance.
var?ichild:*?=?mod.child?as?IModuleInterface;
if?(mod.child?!=?null)?{
//?Call?setters?in?the?module?to?adjust?its
//?appearance?when?it?loads.
ichild.setAdjusterID(myId.text);
ichild.setBackgroundColor(myColor.selectedColor);
}?else?{
trace("Uh?oh.?The?mod.child?property?is?null");
}
//?Set?the?value?of?a?local?variable?by?calling?a?method
//?on?the?interface.
currentModuleName?=?ichild.getModuleName();
}
private?function?reloadModule():void?{
mod.unloadModule();
mod.loadModule();
}
]]>
</mx:Script>
<mx:Form>
<mx:FormItem?label="Current?Module:">
<mx:Label?id="l1"?text="{currentModuleName}"/>
</mx:FormItem>
<mx:FormItem?label="Adjuster?ID:">
<mx:TextInput?id="myId"?text="Enter?your?ID"/>
</mx:FormItem>
<mx:FormItem?label="Background?Color:">
<mx:ColorPicker?id="myColor"
selectedColor="0xFFFFFF"
change="reloadModule()"
/>
</mx:FormItem>
</mx:Form>
<mx:Label?text="Long?Shot?Insurance"?fontSize="24"/>
<mx:ComboBox
labelField="label"
close="selectedItem=ComboBox(event.target).selectedItem"
>?
<mx:dataProvider>
<mx:Object?label="Select?Module"/>
<mx:Object?label="Auto?Insurance"?module="AutoInsurance.swf"/>
</mx:dataProvider>
</mx:ComboBox>
<mx:Panel?width="100%"?height="100%">
<mx:ModuleLoader?id="mod"
width="100%"
url="{selectedItem.module}"
ready="applyModuleSettings(event)"
/>
</mx:Panel>
<mx:Button?id="b1"?label="Reload?Module"?click="reloadModule()"/>
</mx:Application>
?
接口文件,?

//?modules/interfaceexample/IModuleInterface
package
{
imp ort?flash.events.IEventDispatcher;
public?interface?IModuleInterface?extends?IEventDispatcher?{
function?getModuleName():String;
function?setAdjusterID(s:String):void;
function?setBackgroundColor(n:Number):void;
}
}
?
Module模块文件,?
<?xml?version="1.0"?>
<!--?modules/interfaceexample/AutoInsurance.mxml?-->
<mx:Module?xmlns:mx=" http://www.adobe.com/2006/mxml"?width="100%" height="100%"?implements="IModuleInterface"> <mx:Panel?id="p1" title="Auto?Insurance" width="100%" height="100%" backgroundColor="{bgcolor}" >? <mx:Label?id="myLabel"?text="ID:?{adjuster}"/> </mx:Panel> <mx:Script> <![CDATA[ [Bindable] private?var?adjuster:String; [Bindable] private?var?bgcolor:Number; public?function?setAdjusterID(s:String):void?{ adjuster?=?s; } public?function?setBackgroundColor(n:Number):void?{ //?Use?a?bindable?property?to?set?values?of?controls //?in?the?module.?This?ensures?that?the?property?will?be?set //?even?if?Flex?applies?the?property?after?the?module?is //?loaded?but?before?it?is?rendered?by?the?player. bgcolor?=?n; //?Don't?do?this.?The?backgroundColor?style?might?not?be?set //?by?the?time?the?ModuleLoader?triggers?the?READY //?event: //?p1.setStyle("backgroundColor",?n); } public?function?getModuleName():String?{ return?"Auto?Insurance"; } ]]> </mx:Script> </mx:Module>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读