http://353345996-qq-com.iteye.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>
分享到:
相关推荐
Flex模块间通信是Adobe Flex应用程序开发中的一个重要概念,它允许不同模块之间共享数据、功能和服务。在大型项目中,模块化设计有助于代码组织和管理,提高代码复用性,同时降低复杂度。本示例将深入讲解如何在Flex...
在这个过程中,FlexModule_j2ee会处理Flex应用与JSP之间的通信,例如通过AMF(Action Message Format)协议进行数据交换,使得Flex客户端可以调用服务器端的Java服务,或者Java服务可以向Flex客户端推送数据。...
FlexModule_j2ee.zip是一个压缩包,包含了将Flex前端技术集成到JSP(Java...这包括了前端的Flex应用设计、后端的Java服务开发以及两者之间的数据通信机制,对于想要提升Web应用质量的开发者来说是一份宝贵的参考资料。
Flex 基于 Module 模块的开发是一种有效的软件架构策略,它允许将大型应用程序分解为更小、更易于管理的单元,称为模块。模块化的主要目标是提高代码的可维护性、可扩展性和性能。 1. **模块化的定义与原理** - **...
- 使用事件来协调Module之间的通信,避免直接引用。 - 考虑到错误处理,添加适当的异常捕获和用户反馈机制。 综上所述,本示例展示了如何在Flex环境中利用ModuleLoader动态加载和卸载Module,以实现更加灵活和...
在J2EE环境中,Flex模块通常通过AMF(Action Message Format)协议与服务器进行通信,实现高效的数据交换。 从压缩包子文件的文件名称列表中,我们看到有一个名为`readme.txt`的文件。这个文件通常是提供关于压缩包...
Flex模块(Flex Module)是Adobe Flex框架中的一个重要概念,它允许开发者将大型应用程序分解为多个独立的、可重用的组件,这些组件被称为模块。在Flex应用中,模块可以按需加载,从而优化应用程序的启动时间和内存...
4. **模块通信**:模块间需要进行数据和事件传递。可以使用`LocalConnection`对象或事件监听来实现模块间的通信,但需要注意避免循环引用和内存泄漏。 5. **性能优化**:合理组织模块结构,避免不必要的模块加载。...
在Flex中,模块(Module)是一种可重用的组件,可以被加载到主应用程序(Application)中,以实现代码的模块化和复用。 在Flex中,模块间的通信主要通过以下几种方式实现: 1. **事件监听**:模块可以通过发布...
目录: 第1篇 基础知识篇 第1章 走进Flex世界 第2章 Flex基础知识 第3章 语言基础 第4章 数据基础 第5章 Flex事件驱动 第2篇 视觉设计篇 第6章 Flex皮肤设计 ... 第21章 Flex与Java EE通信
【Flex面试题】Flex面试题主要涵盖Flex的基础概念、开发框架、MVC模式的应用、内存管理、垃圾回收机制、前端性能优化以及与后端通信等多个方面。以下是对这些知识点的详细解析: 1. AS2与AS3的区别: AS2...
10. **Flex模块化**:通过模块(Module)机制,开发者可以将大型应用拆分为多个小的、可独立加载的单元,以优化加载时间和资源管理。 11. **移动开发支持**:Flex 4.5版本开始,增加了对移动设备的支持,能够创建...
Flex对象之间的数据传递,包括页面调用之间的数据传递,是Flex开发中的关键概念,它涉及组件通信、事件处理和应用程序状态管理。下面将详细探讨这一主题。 首先,我们来看Flex对象间的通信。在Flex应用中,组件可以...
Flex模块(FlexModule)是Flex应用程序中可重用的组件,它们可以在运行时动态加载和卸载。在JSP中嵌入Flex时,我们可以创建一个或多个Flex模块,每个模块负责特定的功能,然后在需要时通过JSP页面进行调用。 2. **...
总结起来,"flex + tomcat + myEclipse环境配置与使用"涉及的关键知识点包括:MyEclipse的Flex支持,Flex SDK的安装和配置,Tomcat服务器的部署,Flex模块的创建,以及Flex与Tomcat之间的数据通信。理解并掌握这些...
7. 模块化开发:使用Flex模块(Module)可以提高代码复用性和项目组织,但需注意模块间的通信和加载策略。 总之,学习Flex过程中,遇到问题要深入理解其原理,结合实际场景灵活运用,同时关注官方文档和社区资源,...
注意,`FlexModule_j2ee.zip`实际上是一个war文件,需要重命名为zip并再次解压,以便获取其内部内容。 2. 将解压后的`flex`文件夹复制到你的Java Web工程的`WEB-INF`目录下,同时将`lib`目录中的`flex-bootstrap....