flex流行mvc框架之cairngorm小试牛刀_第1页
flex流行mvc框架之cairngorm小试牛刀_第2页
flex流行mvc框架之cairngorm小试牛刀_第3页
flex流行mvc框架之cairngorm小试牛刀_第4页
flex流行mvc框架之cairngorm小试牛刀_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. package org.rjb.voimport com.adobe.cairngorm.vo.ivalueo

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

5、a代码 1. packageorg.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. privatestaticvar

6、modellocator:usermodellocator; 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(

7、youcanonlyhaveoneusermodellocator); 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-

8、login;/单例对象private 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 on

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

10、46. 47. 48. 49. 50. 51. 52. 53. 54. 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. impor

11、tflash.events.event; 6. 7. importorg.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.

12、this.uservo=uservo; 19. 20. 21. overridepublicfunctionclone():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

13、 static const login_event:string=login;/我们可以在这里加入额外的变量,当然是我们需要的哈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. mand 2. 3. mands.icommand; 4. importcom.adobe.cairngorm.control.cairngormevent; 5. 6. importmx.controls.alert; 7. importmx.core.application; 8. importmx.rpc.iresponder; 9. importmx.r

15、pc.events.resultevent; 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.getinstanc

16、e(); 19. 20. publicfunctionlogincommand() 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. /返回的结果进行

17、处理 31. publicfunctionresult(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. usermodel

18、locator.state=login-result; 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.iresp

19、onder;import mx.rpc.events.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 func

20、tion logincommand() /此处为处理入口,一般我们转交给代理类处理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=da

21、ta.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.sho

22、w(info+);再说说这个控制类,也就是control包下的类,这个下面主要是负责分发事件的,我们要把我们的自定义事件和我们的相应的处理方法关联起来,都是在这里进行的,通常一个类就可以了,下面是logincontrol.as的源码: java代码 1. packageorg.rjb.control 2. 3. importcom.adobe.cairngorm.control.frontcontroller; 4. 5. importorg.rjb.event.loginevent; 6. mand.logincommand; 7. 8. publicclasslogincontrolext

23、endsfrontcontroller 9. 10. publicfunctionlogincontrol() 11. this.initialisecommands(); 12. 13. 14. publicfunctioninitialisecommands():void 15. this.addcommand(loginevent.login_event,logincommand); 16. 17. 18. package org.rjb.controlimport com.adobe.cairngorm.control.frontcontroller;import org.rjb.ev

24、ent.loginevent; import mand.logincommand; public class logincontrol extends frontcontrollerpublic function logincontrol()this.initialisecommands();public function initialisecommands():voidthis.addcommand(loginevent.login_event,logincommand);最后我们就说说我们的代理类哈,代理类前面已经说了是我们的真正的处理类,我们把视图区的数据传到这里进行处理,最好把结果返回到相应的iresponsder接口实现类中,下面是我们的logindelegate.as的源码: java代码 1. packageorg.rjb.business 2. 3. importmx.rpc.iresponder; 4. 5. importorg.rjb.vo.uservo; 6. 7. publicclasslogindelegate 8. 9. publicvarresponder:iresponder; 10. public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论