本篇文章是结合实际的flex project来分别的说一下这个三个特性:(本篇文章只介绍EventMap)
一、EventMap(事件地图)
我不知道官方的中文叫法是什么?但是我还是比较中意这种直译的方式:事件地图。
举例子说明:我有三个MXML文件:A.mxml、B.mxml、C.mxml。而它们之间的关系是:A包含B,B包含C。现在我想在C中触发一个
事件,而最终会反映到A中,因此我做了如下的设定。我定义如下一个customer event:MyEvent(请看下面的片段代码)
public class MyEvent extends Event {
public static const CLICK_ME : String = "clickMe";
public function SupporterListEvent( type:String, bubbles:Boolean=false, cancelable:Boolean=false ) {
super( type, bubbles, cancelable );
}
其中A.mxml里面监听了此方法。
this.addEventListener( MyEvent.CLICK_ME , myEventHandler );
那么我在C.mxml里面触发了这个event:
dispatchEvent( new MyEvent( MyEvent.CLICK_ME ));
那么通常的情况是有A与C之间没有任何关系,因此C虽然触发了这个event,但是无法正常的传递到A中(我只说通常的情况)因此,我们需要在B.mxml里面也写上如下的内容:
//监听C传递过来的event
//注意这是在B中监听的
this.addEventListener( MyEvent.CLICK_ME , myEventHandler );
因此当C触发MyEvent.CLICK_ME后,会被B监听,当B监听到C的事件后,再次使用
//注意:这是在B中触发的
dispatchEvent( new MyEvent( MyEvent.CLICK_ME ));
最终由于A中已经监听了MyEvent.CLICK_ME,因此就可以收到C中触发的事件了(通过B进行了一次传递)。
虽然这样也能完成最初的目的:C → A,那么我们需要在B里面写上一些代码,这样做的缺陷是增加了coding时间,同时也降低了source的可读性。同时也增加了A、B、C的耦合性,因此上述方案不是一个较好的resolution。
而Mate flex framework给我们提供的解决方案:使用EventMap
那么我们如何利用EventMap呢?
- 首先需要引入mate swc。地址:http://mate.asfusion.com/page/downloads
- 定义一个folder:maps
然后在其中定义一个EventMap:MyEventMap.mxml(片段代码如下)
<EventMap xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://mate.asfusion.com/"
xmlns:extensions="com.asfusion.weather.mate.extensions.*">
<mx:Script>
<![CDATA[
import com.wonlen.test.A;
]]>
</mx:Script>
<EventHandlers type="{ MyEvent.CLICK_ME }">
<MethodInvoker generator="{ A }" method="myEventHandler" />
</EventHandlers>
</EventMap>
请注意:
- A:就是我们要被触发的目标位置。
- myEventHandler:我们之前定义的一个event handler
this.addEventListener( MyEvent.CLICK_ME , myEventHandler );
那么我来解释一下上诉的代码:
首先在MyEventMap里面定义如下的结构:
<EventMap xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://mate.asfusion.com/"
xmlns:extensions="com.asfusion.weather.mate.extensions.*">
</EventMap>
然后就是我们这次的重头戏了:
<EventHandlers type="{ MyEvent.CLICK_ME }">
<MethodInvoker generator="{ A }" method="myEventHandler" />
</EventHandlers>
上面的结构我用中文说一下:
- 当在C中触发了dispatchEvent( new MyEvent( MyEvent.CLICK_ME ));
- 会通过EventMap”寻找到“到类型为 MyEvent.CLICK_ME的eventHandler(即上图定义的结构)
- 之后会寻找到这段结构:<MethodInvoker generator="{ A }" method="myEventHandler" />
它的结构是:定义了接受event handler之后的对象A,然后调用的method:myEventHandler
最后一个步骤:
我们在这个project的主文件下面写上如下代码:
< maps:MyEventMap />
然后我们可以去掉在A中的监听:
this.addEventListener( MyEvent.CLICK_ME , myEventHandler );
通过以上以上的代码,那么最终的过程:
当C触发MyEvent.CLICK_ME后,会通过EventMap找到type为MyEvent.CLICK_ME
的<EventHandlers>结构,触发完毕后会调用<MethodInvoker>的目标对象A中的
myEventHandler函数。也就说通过EventMap,我们可以让MyEvent.CLICK_ME传递到任意地方:MXML文件里面、AS文
件里面都是完全可行的。
EventMap的特点:
它会帮助你的project 和 Flex来管理这些乱七八的事件,也就是只要是在同一个project里面,我可以通过EventMap将任何两个mxml之间通过事件传导的方式联系起来。EventMap将事件(行为)与最终事件处理(动作)联系了起来。
由于它将行为与动作绑定起来了,因此也带来了两个缺点:
- 当一个project里面有100个行为与动作的话,那么我们要在MyEventMap写100段如上的结构,这就变成了一种负担。理所当然的解
决方法:我们可以把这些EventMap分开。例如:ChatEventMap(负责聊天的EventMap)、DrawEventMap(负责绘画的
EventMap)等等。
- 由于它利用了Event type来对Event进行区分,因此我们每一个行为与动作都要设定一个唯一的Event type。如果有100个行为与动作的话,需要设定100个event name,这样的方式的确比较恐怖一些。
以上就是Mate flex framework的EventMap,下次给大家介绍Mate的Injectors(依赖注入机制),通过这种方式可以真正实现mvc的分离,而不需要使用倍受Cairngorm、PureMVC用户痛苦的单例模式。
原文:http://www.riameeting.com/node/163
- 大小: 6 KB
- 大小: 4.4 KB
分享到:
相关推荐
Mate flex framework在实际项目中的应用
2. **放置编译好的框架SWC**:在项目的“libs”文件夹中放置编译好的框架SWC文件(Mate.swc),这样就可以在项目中使用所有的Mate类和标签。 3. **创建自定义事件**:为了响应用户的股票报价请求,我们需要创建一个...
Mate框架的核心思想是通过事件驱动的方式来管理应用程序的状态和流程,这在大型Flex项目中尤其有用。 Mate框架的SWC库文件(如“library.swf”)是预编译的ActionScript组件,可以被引入到Flex项目中,以利用其提供...
Flex Mate HelloWorld 示例是一个入门级的教程,用于介绍如何在Flex应用程序中使用Mate框架。Mate框架是一种流行的ActionScript 3.0框架,它为基于组件的Flex开发提供了强大的结构和事件驱动的设计模式。在这个例子...
总之,FLEX MATE框架源代码的学习是一个宝贵的机会,能够让我们更好地理解面向对象设计原则、依赖注入和状态机模式在实际项目中的应用。通过深入研究和实践,开发者可以充分利用MATE的强大功能,创造出更加健壮、...
10. Flex框架:Flex还包含了一些可扩展的框架,如 Cairngorm、BlazeDS 和 Mate 等,它们提供了一种组织代码结构和管理应用程序状态的方式,便于开发大型复杂项目。 在压缩包文件“FlexApplaction”中,可能包含了源...
在这个标题为“mate框架应用几点心得”的主题中,我们可以探讨几个关键的知识点: 1. **模块化设计**: Mate框架支持模块化开发,这意味着开发者可以将复杂的应用程序分解成多个独立的、可重用的模块,每个模块...
4. **库文件**:描述中提到的"必备的lib"可能包含Flex SDK的库,Spring BlazeDS库(用于Flex和Spring之间的通信),以及其他第三方库,如 Parsley 或 Mate(用于依赖注入和事件驱动架构在Flex中的实现)。...
综上所述,"Flex中文帮助"资料可能涵盖了Flex的基础知识、与Java的集成、开发工具、应用架构以及实际开发中的各种技巧和最佳实践。通过学习这些内容,开发者可以更好地理解和掌握Flex技术,提升富互联网应用程序的...
欢迎大家下载,多提宝贵意见!!!(*^__^*)
一个关于flex的框架,名字mate,比较小巧,上手容易
在描述中多次提到"flex flex flex flex flex",这可能意味着在讨论Flex的核心概念或者强调其在应用中的重要性。Flex的核心概念包括: 1. **MXML**:MXML是一种声明式语言,类似于HTML,用于定义Flex应用程序的用户...
- PureMVC:广泛应用,适合中小型项目,基于MVC模式,有中央存储器的单件类设计。 - Mate:事件驱动型框架,基于MXML,限制了AS代码的使用。 - Swiz:与Mate相似,但未深入了解。 3. MVC模式在Flex开发中的实现...
附件是关于 Flash/Flex 几个重要框架 Cairngorm、Mate、PureMVC以及Swiz 的典型例子,由 Tony Hillerson 提供 Homepage: http://insideria.com
在Flex中,通常使用ActionScript类来实现模型,并且可以利用 Cairngorm、Swiz 或 Mate 等第三方库来更好地支持MVC模式。 2. **视图(View)**:视图层是用户界面的展示部分,它与模型层交互,展示模型中的数据。在...
在本文中,我们将深入探讨如何使用Adobe Flex Builder创建一个功能完备...在实际开发中,你还可以结合其他技术,如BlazeDS进行服务器通信,或者使用 Cairngorm 或 Mate 模式进行应用架构,提升应用的可维护性和扩展性。
在本压缩包中,你将找到一系列用于Flex开发的重要组件和库,使得开发者能够更便捷地构建和管理项目。 1. **Flex SDK**:Flex软件开发工具包(SDK)是Flex开发的核心,它包含了编译Flex应用程序所需的编译器、框架库...
在实际开发中,利用Flex MVC架构可以实现模块化的开发,提高代码的复用性,同时方便团队协作。通过解耦模型、视图和控制器,开发者可以独立地修改各个部分,而不会对整个应用造成影响。这使得Flex MVC成为构建大型、...
在Flex API中,我们可以找到关于Flex组件库、事件处理、数据绑定、动画效果、图形绘制、网络通信等多个方面的知识。以下是一些关键知识点的概述: 1. **Flex组件库**:Flex提供了丰富的UI组件,如Button、Label、...
3. MVC模式在Flex中的应用: - 手动分离UI和业务逻辑,将MXML文件中的UI元素分配给Mediator,再由Controller管理Mediator。 - 使用框架(如Cairngorm或PureMVC)自动化处理MVC分离,遵循框架规范即可。 4. 内存...