Flex 利用ActionScript接口实现Module模块间的数据通信
2013-07-12 10:55
585 查看
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[
import mx.events.ModuleEvent;
import 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
{
import 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>
相关文章推荐
- 利用HTTPService实现Flex与服务器端低数据量通信
- 利用VC和ADO接口编写一个dll模块实现对数据库数据的处理
- 利用VC和ADO接口编写一个dll模块实现对数据库数据的处理
- 客户端flex利用blazeds调用后台AO实现编辑数据
- 利用接口灵活实现Excel导入/到出数据功能
- 利用GSM短信实现实时数据通信
- Py:利用pickle模块和API天气接口实现输入城市得到该城市的天气预报——Jason niu
- 利用Python如何实现数据驱动的接口自动化测试
- 利用回调接口实现activity之前传数据
- 利用getParameterNames实现一个按钮所有模块数据都提交
- 利用抽象工厂实现自定义多数据类型接口
- Flex ExternalInterface 在 ActionScript 和 Flash Player 容器之间实现直接通信的应用程序编程接口
- 利用springmvc提供一个HandlerExceptionResolver接口实现出错返回Json数据
- AM5728通过GPMC接口与FPGA高速数据通信实现
- 利用接口回调实现fragment与activity的通信
- 利用内存chunk充当数据buffer的vector的实现,和STL vector 有接口操作性能比较
- Flex的Module通信,事件和接口方式
- 数据分页模块系列 (一) 利用工具Pager-taglib轻松实现分页技术
- android利用httpclient实现post、get请求restful接口进行json和form表单数据提交等公共方法类
- Flex中如何利用ActionScript代替mx:Sequence标签实现顺序效果