-
关于我
-
跟随我
-
订阅我
-
关注一下
-
最新文章
- [02/13][日记]春节快乐心想事成
- [01/28][Flex]Adobe软件在电影阿凡达中的应用
- [12/30][排名]TIOBE程式語言最新排名-2009年12月版
- [12/30][日记]2009年终岁尾的一些感想
- [12/30][讲座]艾睿网12月份Cmax北京的演讲稿
- [11/28][日记]佛山、广州之行
- [11/21][Acrobat]Acrobat.com改版(包括Mobile版本)
- [11/19][AIR]基于AIR 2.0 的几点猜测
- [11/19][Silverlight]Silverlight 4 beta released!
- [11/18]Flash Player 10.1 and AIR 2.0 消息汇总
[Flex]浅析Mate flex framework在实际项目中的应用(三)
索引:
浅析Mate flex framework在实际项目中的应用(一)
浅析Mate flex framework在实际项目中的应用(二)
浅析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传递到任何我想传递的地方。
代码如下:
而这个时候,我增加了一个需求:
我想让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的方式,而是应该采用setter、getter的方式,这样可以更好的控制闭包。
okay,我们已经增加了一个变量:name,它的作用是用来保存触发者的名字。因此C.mxml的代码也需要稍微的修改一下,主要对name进行赋值。
上面的代码比较简单,不做过多介绍。
okay,既然现在已经把名字保存起来了,那么我们需要一个逻辑对这个传入的参数进行一些处理。我们增加一个叫做business的文件(注意这里的名称与Cairngorm、PureMVC是相似而的)
然后在business文件夹下面增加一个AS文件:MyController.as,然后里面的内容如下:
上面的代码,也是比较简单的,增加了三个属性,type 和 name。它们的意义上分别是:
1、type:类型。
2、name:名字。
3、talk:保存经过设定后的字符串。
经过上面的修改,我们完成了事件携带值的修改和定义了一个controller性质的AS:MyController
接下来在A.mxml里面增加一些内容,例如如下的source:
我定义了一个变量:othertalks,它的作用是用于显示接收的内容。
那么MyEventMap应该如下修改呢?请看下面的代码:
这次MyEventMap改动就比较大了,不过都是比较好理解的,我现在给大家解释一下:
它定义了一个段
让我们在回顾一下,MyController的内容:
1、一个method:settingTalks
2、三个参数:type、name(传入的两个properties)、talk(这是用于保存字符串的变量)
当触发MyEvent.CLICK_ME后,同时传入了两个参数:type 和 name。然后会调用MyController里面的method:settingTalks。
当这一切都完成后,Mate就会调用
首先注入的目标对象是A,接下来的代码;
我们分析一下上面的代码,
targetKey="othertalks",说明了被注入的属性是A.mxml里面的othertalks。
source="{ MyController }" sourceKey="talk":说明了使用的MyController里面的属性talk作为注入属性,即将MyController.talk 赋值给A.othertalks。
我现在重述一下上面的内容:
当在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(插件、扩充)机制。


