Flex之使用Cairngorm(4) - Cairngorm Extensions
Previous Posts:
1.准备工作 http://nealmi.iteye.com/blog/164867
2.使用ModelLocator http://nealmi.iteye.com/blog/164879
3.Command & Event http://nealmi.iteye.com/blog/177370
Cairgorm Step By Step教程[推荐]
http://www.davidtucker.net/category/cairngorm/(英文)
下载源码:
后台指向我的Google App Engine 程序, 你可以暂时不关心后台, 直接导入到FlexBuilder里运行.
http://nealmi.iteye.com/topics/download/2e854ac3-89b2-3f15-814b-e4317380608e
就我个人来说,Cairngorm有两个致命的问题,直接影响到我是否使用它.
1.不支持通知视图.
Cairngorm2.1之前可以用ViewHelper 和 ViewLocator,但是自从Cairngorm2.1开始已经不推荐了.而且 ViewHelper和ViewLocator 方式本身就违反MVC.
2.不支持子Controller.
所以我选择了使用 UM Cairngorm Extensions. http://code.google.com/p/flexcairngorm/
Refactor To UM Cairngorm Extensions:
1.重构Event.继承com.universalmind.cairngorm.events.UMEvent.
在构造函数里接受一个IResponder类型的参数(用作通知视图), UMEvent 本身带有一个data属性.
2.重构Controller.继承com.universalmind.cairngorm.control.FrontController.增加对子Controller的支持,可以通过addSubController(..)方法来添加子Controller.这样可以每个独立的模块有独立MVC结构.
3.重构Delegate, 继承com.universalmind.cairngorm.business.Delegate.
6.View代码.
6.注意Value Object的写法.要实现com.universalmind.cairngorm.vo.IValueObject接口.实现copyFrom 和Clone方法.package net.imzw.UserManagerDemo.vo{import com.universalmind.cairngorm.vo.IValueObject;[Bindable]public class UserVO implements IValueObject{public var id:Number;public var loginName:String;public var password:String;public function UserVO( loginName:String=null, password:String=null ){this.loginName = loginName;this.password = password;}public function copyFrom(src:*):*{this.loginName = src.loginName;this.password = src.password;}public function clone():*{return new UserVO(loginName, password);}public function equals(anotherUser:*):Boolean{if(null == anotherUser) return false;if(id == anotherUser.id && loginName == anotherUser.loginName){return true;}return false;}public function toString():String{return "User[loginName:"+loginName+"]";}}}
以上只是粗略的介绍.有什么问题可以联系我通过邮件 imzw.net+javaeye at gmail.com.
-------------
IT'S NEAL.