flex流行mvc框架之cairngorm小试牛刀.doc

上传人:文库蛋蛋多 文档编号:2386519 上传时间:2023-02-17 格式:DOC 页数:11 大小:116KB
返回 下载 相关 举报
flex流行mvc框架之cairngorm小试牛刀.doc_第1页
第1页 / 共11页
flex流行mvc框架之cairngorm小试牛刀.doc_第2页
第2页 / 共11页
flex流行mvc框架之cairngorm小试牛刀.doc_第3页
第3页 / 共11页
flex流行mvc框架之cairngorm小试牛刀.doc_第4页
第4页 / 共11页
flex流行mvc框架之cairngorm小试牛刀.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《flex流行mvc框架之cairngorm小试牛刀.doc》由会员分享,可在线阅读,更多相关《flex流行mvc框架之cairngorm小试牛刀.doc(11页珍藏版)》请在三一办公上搜索。

1、前几天学了下Flex的一MVC流行框架Cairngorm,并自己小试牛刀一把,暂作了一网站后台,通过项目让我现在觉得Cairngorm并不是一个如此神奇的东西,只要我们大家都能按照它走一遍就会有所收获,我们就会对MVC有个基本的了解,也会对Cairngorm有一个初步了解,希望大家通过我的这篇文章也能写出一个demo出来,当然是能在不看我这篇demo或者别人的demo的前提下写出来啦,呵呵,首先要说的是,这个框架并不是一定要在lcds下才能运行的,所以大家可以简单的建个Flex项目就OK了,下面就开始我们的Demo。在最后会把整个工程源码提供出来,欢迎下载。 我们新建工程,有一个Cairngr

2、om的swc包一定要引进去才行的哈,不然是不能成功的,所以大家可以Cairngrom的官方网站上去下载哈,我在这里提供地址,方便大家去下载 先把我刚写的一个小demo的部署结构给大家看看, 下面我会一一讲解每个包中应方的类,每个包的命名都是很规范的,这样大家就很清晰的理解你写的代码的意思,所以建议大家不要轻易改变这么命名。我先说说这里的包,既然是MVC框架的话,当然我们要把哪些是M,哪些是V以及哪些是C给分出来。M主要是模型,我们从命名也许也能猜到了,model和vo应该都归属于该层了,它主要是存放的是数据模型,vo中存的就是普通的数据,一般的话都是最小单位的数据,是不能进行再次分解的数据,代

3、码如下: Java代码 1. packageorg.rjb.vo 2. 3. importcom.adobe.cairngorm.vo.IValueObject; 4. /一般情况下,我们需要实现框架中的IValueObject接口 5. publicclassUserVOimplementsIValueObject 6. /存放用户名 7. publicvaruserName:String; 8. /存放密码 9. publicvarpassword:String; 10. 11. import com.adobe.cairngorm.vo.IValueObject; /一般情况下,我们需要

4、实现框架中的IValueObject接口public class UserVO implements IValueObject/存放用户名public var userName:String;/存放密码public var password:String;而model中的数据一般是包括相应的VO对象以及一些相关的应用变量,比如说系统状态什么的,当然要按自己的意思来了,并且我们一般把它做成单例类,前面我有篇文章就是讲单例模式的,并对比了java和actionscript3.0中不同的实现方式,如果还不是很了解的话大家可以去参考下。下面是改model类: Java代码 1. packageorg.

5、rjb.model 2. 3. importcom.adobe.cairngorm.model.ModelLocator; 4. 5. importorg.rjb.vo.UserVO; 6. Bindable 7. publicclassUserModelLocatorimplementsModelLocator 8. 9. /存放vo对象 10. publicvaruserVO:UserVO; 11. /存放一些状态变量 12. publicvarstate:String=User-Login; 13. /单例对象 14. privatestaticvarmodelLocator:UserM

6、odelLocator; 15. 16. publicstaticfunctiongetInstance():UserModelLocator 17. if(modelLocator=null) 18. modelLocator=newUserModelLocator(newSingleClass(); 19. 20. returnmodelLocator; 21. 22. 23. publicfunctionUserModelLocator(single:SingleClass) 24. if(single=null) 25. thrownewError(YouCanOnlyHaveOneU

7、serModelLocator); 26. 27. 28. 29. 30. 31. classSingleClasspackage org.rjb.modelimport com.adobe.cairngorm.model.ModelLocator;import org.rjb.vo.UserVO; Bindablepublic class UserModelLocator implements ModelLocator/存放vo对象public var userVO:UserVO;/存放一些状态变量public var state:String=User-Login;/单例对象private

8、 static var modelLocator:UserModelLocator;public static function getInstance():UserModelLocatorif(modelLocator=null)modelLocator=new UserModelLocator(new SingleClass();return modelLocator;public function UserModelLocator(single:SingleClass)if(single=null)throw new Error( You Can Only Have One UserMo

9、delLocator );class SingleClass设成单例类的话我们可以保证系统的数据得到同意,并且我们会把它设置为绑定模式,可以和接下来说的view包下的视图类进行数据绑定。view包下前面说了,是存放相关的视图的,可以是as的也可以是mxml的,看大家的意思了,比如说我们可以存放些自定义的组建或扩展的组件等,下面是LoginPanel.mxml的代码: Java代码 1. 2. 3. 4. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.

10、55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 接下来我们说说event包,其实这个包我们和接下来说的commands包合并,我在这就分开了,为的是使结构更加清晰哈,在event包下我们存放的是我们自定义的事件,比如下面的LoginEvent.as: Java代码 1. packageorg.rjb.event 2. 3. importcom.adobe.cairngorm.control.CairngormEvent; 4. 5. importflash.events.Event; 6. 7. importorg

11、.rjb.vo.UserVO; 8. 9. publicclassLoginEventextendsCairngormEvent 10. 11. /定义事件类型常量 12. publicstaticconstLOGIN_EVENT:String=login; 13. /我们可以在这里加入额外的变量,当然是我们需要的哈 14. publicvaruserVO:UserVO; 15. publicfunctionLoginEvent(userVO:UserVO) 16. 17. super(LOGIN_EVENT); 18. this.userVO=userVO; 19. 20. 21. over

12、ridepublicfunctionclone():Event 22. 23. returnnewLoginEvent(userVO); 24. 25. 26. package org.rjb.eventimport com.adobe.cairngorm.control.CairngormEvent;import flash.events.Event;import org.rjb.vo.UserVO;public class LoginEvent extends CairngormEvent/定义事件类型常量public static const LOGIN_EVENT:String=log

13、in;/我们可以在这里加入额外的变量,当然是我们需要的哈public var userVO:UserVO;public function LoginEvent(userVO:UserVO)super(LOGIN_EVENT);this.userVO=userVO;override public function clone():Eventreturn new LoginEvent(userVO);好了,我们继续说说在command包下的东东哈,在这里的话主要是存放我们自定义的事件一旦发生的时候,我们究竟要怎么处理它,所以在这下面是我们自定义的类似监听事件的类,但是在这些类中我们一般只相当于一个

14、事件处理的接口,我们会把真正的处理转交给business中的代理类中,尤其是进行远程调用的时候最常用,下面是我们的LoginCommand类: Java代码 1. packagemand 2. 3. importmands.ICommand; 4. importcom.adobe.cairngorm.control.CairngormEvent; 5. 6. importmx.controls.Alert; 7. importmx.core.Application; 8. importmx.rpc.IResponder; 9. importmx.rpc.events.ResultEvent;

15、10. 11. importorg.rjb.business.LoginDelegate; 12. importorg.rjb.event.LoginEvent; 13. importorg.rjb.model.UserModelLocator; 14. 15. publicclassLoginCommandimplementsICommand,IResponder 16. 17. /引用单例数据模型 18. publicvaruserModelLocator:UserModelLocator=UserModelLocator.getInstance(); 19. 20. publicfunc

16、tionLoginCommand() 21. 22. 23. 24. /此处为处理入口,一般我们转交给代理类处理 25. publicfunctionexecute(event:CairngormEvent):void 26. varloginDelegate:LoginDelegate=newLoginDelegate(this); 27. varloginEvent:LoginEvent=LoginEvent(event); 28. loginDelegate.login(loginEvent.userVO); 29. 30. /返回的结果进行处理 31. publicfunctionre

17、sult(data:Object):void 32. varresult:String=data.toString(); 33. if(result=OK) 34. mx.core.Application.application.loginPanel.currentState=success; 35. userModelLocator.state=Login-Result; 36. else 37. mx.core.Application.application.loginPanel.currentState=fail; 38. userModelLocator.state=Login-Res

18、ult; 39. 40. 41. /处理过程出错时的处理 42. publicfunctionfault(info:Object):void 43. mx.controls.Alert.show(info+); 44. 45. 46. 47. package mandimport mands.ICommand;import com.adobe.cairngorm.control.CairngormEvent;import mx.controls.Alert;import mx.core.Application;import mx.rpc.IResponder;import mx.rpc.eve

19、nts.ResultEvent;import org.rjb.business.LoginDelegate;import org.rjb.event.LoginEvent;import org.rjb.model.UserModelLocator;public class LoginCommand implements ICommand, IResponder/引用单例数据模型public var userModelLocator:UserModelLocator=UserModelLocator.getInstance();public function LoginCommand() /此处

20、为处理入口,一般我们转交给代理类处理public function execute(event:CairngormEvent):voidvar loginDelegate:LoginDelegate=new LoginDelegate(this);var loginEvent:LoginEvent=LoginEvent(event);loginDelegate.login(loginEvent.userVO);/返回的结果进行处理public function result(data:Object):voidvar result:String=data.toString();if(result=OK)mx.core.Application.application.loginPanel.currentState=success;userModelLocator.state=Login-Result;elsemx.core.Application.application.loginPanel.currentState=fail; userModelLocator.state=Login-Result;/处理过程出错时的处理public function fault(info:Object):voidmx.controls.Alert.show(info+);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号