`

浅析Mate flex framework在实际项目中的应用(三)

阅读更多

经过上两篇文章的洗礼,相信大家对mate flex framework有了一些初步的了解。那么今天我们进行mate flex framework的重头戏:Injectors(依赖注入机制)

二、Injectors(依赖注入机制)

那么什么时候Injectors(依赖注入机制)呢?具体可以看这里,人家已经描述的很清楚了,我就没有必要再重复一遍了:)http://www.adobe.com/devnet/flex/articles/dependency_injection.html

如何使用mate flex framework来完成Injectors(依赖注入机制):好吧,我们接着上篇文章的一个例子来说明一下,当C.mxml触发了 dispatchEvent( new MyEvent( MyEvent.CLICK_ME ));后,会很容易的被EventMap传递到任何我想传递的地方。代码如下:

      <EventMap xmlns:mx="http://www.adobe.com/2006/mxml"
      xmlns="http://mate.asfusion.com/">
      <mx:Script>
      <![CDATA[
      import com.wonlen.test.A;
      ]]>
      </mx:Script>
      <EventHandlers type="{ MyEvent.CLICK_ME }">
      <MethodInvoker generator="{ A }" method="myEventHandler" />
      </EventHandlers>
      </EventMap>
 

而这个时候,我增加了一个需求:我想让C不仅可以传递消息还想让A得到C传递过来的消息后,显示到UI上面。例如:在A上面显示如下的内容:C跟你打了声招呼。我是A,我得到了你传递过来的消息。

为了降低A与C的耦合性,因此A是不知道C的存在的,而C也只会把自己的消息传递出去,而不会理会到底是A接受到,还是D接收到。上面的一个需求其实就将mvc的特征体现出来到了,即显示层(v)、控制层(c)、逻辑层(m)独立分开。

okay,由于需要传递参数,所以需要改写MyEvent.as,增加一个public variable :name,代码如下:

      public class MyEvent extends Event {
      public static const CLICK_ME : String = "clickMe";
      public var name : String;
      public function SupporterListEvent( type:String, bubbles:Boolean=false, cancelable:Boolean=false ) {
      super( type, bubbles, cancelable );
      }

注意:在真正的实际应用中 ,不用直接采用public的方式,而是应该采用setter、getter的方式,这样可以更好的控制闭包。

okay,我们已经增加了一个变量:name,它的作用是用来保存触发者的名字。因此C.mxml的代码也需要稍微的修改一下,主要对name进行赋值。

      var myEvent : MyEvent = new MyEvent( MyEvent.CLICK_ME );
      myEvent.name = "C";
      dispatchEvent( myEvent );

 上面的代码比较简单,不做过多介绍。okay,既然现在已经把名字保存起来了,那么我们需要一个逻辑对这个传入的参数进行一些处理。我们增加一个叫做 business的文件(注意这里的名称与Cairngorm、PureMVC是相似的)然后在business文件夹下面增加一个AS文 件:MyController.as,然后里面的内容如下:

      package com.wonlen.test.business
      {
      public class MyController{
      [Bindable]
      public var talk : String;
      [Bindable]
      public var type : String;
      [Bindable]
      public var name : String;
      // ----------------------------------------------------------
      public function settingTalks() : void {
      if ( type == "clickMe" ) {
      talk = name + "跟你打了声招呼。";
      }
      else {
      talk = name + "离开了。";
      }
      }
      }
      }
 

上面的代码,也是比较简单的,增加了三个属性,type 和 name。它们的意义上分别是:

  1. type:类型。
  2. name:名字。
  3. talk:保存经过设定后的字符串。

经过上面的修改,我们完成了事件携带值的修改和定义了一个controller性质的AS:MyController接下来在A.mxml里面增加一些内容,例如如下的source:

      <?xml version="1.0" encoding="utf-8"?>
      <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" title="A Panel">
      <mx:Script>
      <![CDATA[
      [Bindable]
      public var othertalks : String;
      ]]>
      </mx:Script>
      <mx:Label text="{ othertalks + '我是A,我得到了你传递过来的消息' }" />
      </mx:Panel>

 我定义了一个变量:othertalks,它的作用是用于显示接收的内容。那么MyEventMap应该如何修改呢?请看下面的代码:

      <EventMap xmlns:mx="http://www.adobe.com/2006/mxml"
      xmlns="http://mate.asfusion.com/">
       
      <mx:Script>
      <![CDATA[
      import com.wonlen.test.A;
      ]]>
      </mx:Script>
       
      <EventHandlers type="{ MyEvent.CLICK_ME }">
      <MethodInvoker generator="{ MyController }" method="settingTalks">
      <Properties type="{ MyEvent.CLICK_ME }" name="{ 'C' }" />
      </MethodInvoker>
      </EventHandlers>
       
      <Injectors target="{ A }">
      <PropertyInjector targetKey="othertalks" source="{ MyController }" sourceKey="talk" />
      </Injectors>

      </EventMap>

 这次MyEventMap改动就比较大了,不过都是比较好理解的,我现在给大家解释一下:

      <MethodInvoker generator="{ MyController }" method="settingTalks">
      <Properties type="{ MyEvent.CLICK_ME }" name="{ 'C' }" />
      </MethodInvoker>
 

它定义了一个段<MethodInvoker>,这个段上次我应该已经讲过了,只不过上次的generator = A,而这次是:MyController而已。
让我们在回顾一下,MyController的内容:

  1. 一个method:settingTalks
  2. 三个参数:type、name(传入的两个properties)、talk(这是用于保存字符串的变量)

既然需要传入两个参数,所以我们就定义了一个属性段<Properties>,它在Mate里面是专门负责用于对XXX的属性进行赋值的工作。

那么这个段的作用是什么?当触发MyEvent.CLICK_ME后,同时传入了两个参数:type 和 name。然后会调用MyController里面的method:settingTalks。当这一切都完成后,Mate就会调 用<Injectors>里面的内容,让我们看以下<Injectors>的内容:

      <Injectors target="{ A }">
      </Injectors>

 首先注入的目标对象是A,接下来的代码;

      <PropertyInjector targetKey="othertalks" source="{ MyController }" sourceKey="talk" />
 

我们分析一下上面的代码,<PropertyInjector>定义了要被注入的属性,也就是A中那个变量被进行了注入操作。 targetKey="othertalks",说明了被注入的属性是A.mxml里面的othertalks。source="{ MyController }" sourceKey="talk":说明了使用的MyController里面的属性talk作为注入属性,即将MyController.talk 赋值给A.othertalks。

okay,这就是MyEventMap增加的内容。那么截止到目前所有增加的内容都已经说明过了。

我现在重述一下上面的内容:当在C中触发了MyEvent.CLICK_ME后,会在EventMap里面调用MyController,并且传入 了type 和 name,然后通过settingTalks,最后得到了字符串talk。然后将MyController.talk通过注入方式赋值给 A.othertalks,最终显示在A上面:C跟你打了声招呼。我是A,我得到了你传递过来的消息。

其实经过以上的coding,就形成了一些简单的mvc方式。C只负责触发MyEvent.CLICK_ME,而它无须理会到底是给谁的。同时A也 只负责接收MyEvent.CLICK_ME的消息,而无须理会具体的逻辑是什么,只是单纯的显示得到的结果。MyController封装了主要的业务 逻辑,如果一但有需求变更的话,那么我们只负责修改MyController里面的逻辑即可。由于这个例子比较小,因此我只使用了变量来代替vo。

截止到现在,mate flex framework的三个特点已经介绍完两个:EventMap(事件地图)、Injectors(依赖注入机制)
目前各位初学者完全可以使用这两种方式开发你的flex project了。

下一篇我会介绍一下mate flex framework独有的功能:extensions(插件、扩充)机制。

 

 

原文地址:http://www.riameeting.com/node/170

分享到:
评论

相关推荐

    Mate flex framework在实际项目中的应用

    Mate flex framework在实际项目中的应用

    mate flex 框架 基础 教程(全)

    2. **放置编译好的框架SWC**:在项目的“libs”文件夹中放置编译好的框架SWC文件(Mate.swc),这样就可以在项目中使用所有的Mate类和标签。 3. **创建自定义事件**:为了响应用户的股票报价请求,我们需要创建一个...

    Flex Mate框架swc包及Mate用法

    Mate框架的核心思想是通过事件驱动的方式来管理应用程序的状态和流程,这在大型Flex项目中尤其有用。 Mate框架的SWC库文件(如“library.swf”)是预编译的ActionScript组件,可以被引入到Flex项目中,以利用其提供...

    Flex Mate HelloWorld 例子

    Flex Mate HelloWorld 示例是一个入门级的教程,用于介绍如何在Flex应用程序中使用Mate框架。Mate框架是一种流行的ActionScript 3.0框架,它为基于组件的Flex开发提供了强大的结构和事件驱动的设计模式。在这个例子...

    FLEX MATE框架源代码

    总之,FLEX MATE框架源代码的学习是一个宝贵的机会,能够让我们更好地理解面向对象设计原则、依赖注入和状态机模式在实际项目中的应用。通过深入研究和实践,开发者可以充分利用MATE的强大功能,创造出更加健壮、...

    一个用Flex做的项目 (功能非常强大!)

    10. Flex框架:Flex还包含了一些可扩展的框架,如 Cairngorm、BlazeDS 和 Mate 等,它们提供了一种组织代码结构和管理应用程序状态的方式,便于开发大型复杂项目。 在压缩包文件“FlexApplaction”中,可能包含了源...

    mate框架应用几点心得

    在这个标题为“mate框架应用几点心得”的主题中,我们可以探讨几个关键的知识点: 1. **模块化设计**: Mate框架支持模块化开发,这意味着开发者可以将复杂的应用程序分解成多个独立的、可重用的模块,每个模块...

    flex+spring 工程

    4. **库文件**:描述中提到的"必备的lib"可能包含Flex SDK的库,Spring BlazeDS库(用于Flex和Spring之间的通信),以及其他第三方库,如 Parsley 或 Mate(用于依赖注入和事件驱动架构在Flex中的实现)。...

    Flex中文帮助-1

    综上所述,"Flex中文帮助"资料可能涵盖了Flex的基础知识、与Java的集成、开发工具、应用架构以及实际开发中的各种技巧和最佳实践。通过学习这些内容,开发者可以更好地理解和掌握Flex技术,提升富互联网应用程序的...

    Flex的Mate框架标签注解

    欢迎大家下载,多提宝贵意见!!!(*^__^*)

    flex的框架 mate

    一个关于flex的框架,名字mate,比较小巧,上手容易

    FLEX MVC框架指南与应用示例

    在Flex中,通常使用ActionScript类来实现模型,并且可以利用 Cairngorm、Swiz 或 Mate 等第三方库来更好地支持MVC模式。 2. **视图(View)**:视图层是用户界面的展示部分,它与模型层交互,展示模型中的数据。在...

    flex应用flex应用flex应用

    在描述中多次提到"flex flex flex flex flex",这可能意味着在讨论Flex的核心概念或者强调其在应用中的重要性。Flex的核心概念包括: 1. **MXML**:MXML是一种声明式语言,类似于HTML,用于定义Flex应用程序的用户...

    flex 面试题flex

    - PureMVC:广泛应用,适合中小型项目,基于MVC模式,有中央存储器的单件类设计。 - Mate:事件驱动型框架,基于MXML,限制了AS代码的使用。 - Swiz:与Mate相似,但未深入了解。 3. MVC模式在Flex开发中的实现...

    Flash/Flex 框架应用 Cairngorm、Mate、PureMVC以及Swiz 的典型例子

    附件是关于 Flash/Flex 几个重要框架 Cairngorm、Mate、PureMVC以及Swiz 的典型例子,由 Tony Hillerson 提供 Homepage: http://insideria.com

    Flex实例,form表单

    在本文中,我们将深入探讨如何使用Adobe Flex Builder创建一个功能完备...在实际开发中,你还可以结合其他技术,如BlazeDS进行服务器通信,或者使用 Cairngorm 或 Mate 模式进行应用架构,提升应用的可维护性和扩展性。

    flex包用于开发

    在本压缩包中,你将找到一系列用于Flex开发的重要组件和库,使得开发者能够更便捷地构建和管理项目。 1. **Flex SDK**:Flex软件开发工具包(SDK)是Flex开发的核心,它包含了编译Flex应用程序所需的编译器、框架库...

    flex mvc 架构图

    在实际开发中,利用Flex MVC架构可以实现模块化的开发,提高代码的复用性,同时方便团队协作。通过解耦模型、视图和控制器,开发者可以独立地修改各个部分,而不会对整个应用造成影响。这使得Flex MVC成为构建大型、...

    Flex中文API

    在Flex API中,我们可以找到关于Flex组件库、事件处理、数据绑定、动画效果、图形绘制、网络通信等多个方面的知识。以下是一些关键知识点的概述: 1. **Flex组件库**:Flex提供了丰富的UI组件,如Button、Label、...

    Flex面试题.pdf

    3. MVC模式在Flex中的应用: - 手动分离UI和业务逻辑,将MXML文件中的UI元素分配给Mediator,再由Controller管理Mediator。 - 使用框架(如Cairngorm或PureMVC)自动化处理MVC分离,遵循框架规范即可。 4. 内存...

Global site tag (gtag.js) - Google Analytics