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


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

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

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

二、Injectors(依赖注入机制)

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

如何使用 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的文件(注意这里的名称与CairngormPureMVC是相似而的)
然后在business文件夹下面增加一个AS文件:MyController.as,然后里面的内容如下:

package com.wonlen.test.business
         

        
        
 [Bindable]
        public var talk : String;
        

 [Bindable]
        public var type : String;

        
 [Bindable]
        public var name : String;

 
   

 if ( type == "clickMe" ) {
  name + "跟你打了声招呼。";
            }
 else {
  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="{  }" name="{ 'C' }" />
 </MethodInvoker>

 </EventHandlers>
 
         
        <Injectors target="{ A }">
        <PropertyInjector targetKey="" source="{ MyController }" sourceKey="talk" />
        
</Injectors>

 
         
</EventMap>

 
         

        
<MethodInvoker generator="{ MyController }" method="settingTalks"
 
         
 <Properties type="{  }" name="{  }" />
</MethodInvoker>

 
         
 
         
 
         
 
         

 
         

 
         
 
         

当这一切都完成后, 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的消息,而无须理会具体的逻辑是什么,只是单纯的显示得到的结果。
 
         
 
         

 
        
目前各位初学者完全可以使用这两者方式进行开发你的 Flex project了。

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

转载于:https://www.cnblogs.com/flexblog/archive/2009/05/11/1454408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值