索引:
浅析Mate flex framework在实际项目中的应用(一)
浅析Mate flex framework在实际项目中的应用(二)
浅析Mate flex framework在实际项目中的应用(三)
经过上两篇文章的洗礼,希望大家可以对Mate Flex framework有了一些初步的了解。那么今天我们进行Mate Flex Framework的重头戏:Injectors(依赖注入机制)
二、Injectors(依赖注入机制)
如何使用Mate Flex Framework来完成Injectors(依赖注入机制):
好吧,我们接着上篇文章的一个例子来说明一下,当C.mxml触发了dispatchEvent( new MyEvent( MyEvent.CLICK_ME ));后,会很容易的被EventMap传递到任何我想传递的地方。
代码如下:
<EventMap xmlns:mx="
我想让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应该如下修改呢?请看下面的代码: