原文地址:http://zengxiangshun.iteye.com/blog/1098239
Cairngorm是Flex的一个MVC框架结构
使用Cairngorm的第一步是建立框架结构的骨架,包括了三个对象:
Model Locater;
Service Locator;
Front Controller;
Model Locator:承载了组件之间的所有的传递的信息和数据,这是一个Bindable(可绑定的)对象。
Service Locator:定义了与数据源(Httpservice,Webservice,Remoteobject)之间通讯的界面。
Front Controller:建立播送事件(dispatch event)和命令层(command)之间的对应关系(mapping)。
看一下相关的代码:
BuddyAppModelLocator.as:
Xml代码
- 1. <EM>package com.ny.flex.cairngorm.model
- 2. {
- 3. import com.ny.flex.cairngorm.vo.User;
- 4.
- 5. import mx.collections.ArrayCollection;
- 6.
- 7. [Bindable]
- 8. public class BuddyAppModelLocator
- 9. {
- 10. public var buddyList:ArrayCollection=new ArrayCollection();
- 11. public var loginUser:User=new User();
- 12. public var viewStackSelectedindex :int = 0;
- 13.
- 14. static private var __instance:BuddyAppModelLocator=null;
- 15.
- 16. public function getInstance():BuddyAppModelLocator
- 17. {
- 18. if(__instance == null)
- 19. {
- 20. __instance=new BuddyAppModelLocator();
- 21. }
- 22. return __instance;
- 23. }
- 24. }
- 25. }
- 26. </EM>
在Model Locator代码中,定义了三个public的变量,buddyList:用来存放由数据库获取的密友列表;loginUser:定义一个User类型对象;viewStackSelectedindex:定义viewStack指向的视窗。
几乎所有的服务层返回的信息都需要在Model Locator中有一个相应的对象。
BuddyServiceLocator.mxml:
Xml代码
1. <EM><EM><?xml version=”1.0″ encoding=”utf-8″?>
2. <cairngorm:ServiceLocator xmlns:mx=”http://www.adobe.com/2006/mxml” xmlns:cairngorm=”http://www.adobe.com/2006/cairngorm“>
3. <mx:RemoteObject id=”buddyRo“ destination=”flexmvcRO” >
4.
5. </mx:RemoteObject>
6. </cairngorm:ServiceLocator>
7. </EM></EM>
上述代码定义了程序将要调用的RemoteObject ,RemoteObject 所调用的Destination需要和remote_config.xml文件中的Destination相一致。在此,Destination的值为“flexmvcRO”。
BuddyListController.as:
1. <EM><EM><STRONG>package com.ny.flex.cairngorm.control
如何能将这些乱七八糟的东西结合在一起?其Magic的地方是在主页(Main application)上,代码如下:
BuddList_Main_Cairngorm.mxml:
1. <EM><EM><STRONG><?xml version=”2. <mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml“ xmlns:service=”com.ny.flex.cairngorm.service.*“ xmlns:controller=”com.ny.flex.cairngorm.control.*” xmlns:views=”com.ny.flex.cairngorm.views.*” layout=”absolute“ width=”100%” height=”100%“>