flex流行mvc框架之cairngorm小試牛刀_第1頁
flex流行mvc框架之cairngorm小試牛刀_第2頁
flex流行mvc框架之cairngorm小試牛刀_第3頁
flex流行mvc框架之cairngorm小試牛刀_第4頁
flex流行mvc框架之cairngorm小試牛刀_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、前幾天學(xué)了下flex的一mvc流行框架cairngorm,并自己小試牛刀一把,暫作了一網(wǎng)站后臺,通過項(xiàng)目讓我現(xiàn)在覺得cairngorm并不是一個如此神奇的東西,只要我們大家都能按照它走一遍就會有所收獲,我們就會對mvc有個基本的了解,也會對cairngorm有一個初步了解,希望大家通過我的這篇文章也能寫出一個demo出來,當(dāng)然是能在不看我這篇demo或者別人的demo的前提下寫出來啦,呵呵,首先要說的是,這個框架并不是一定要在lcds下才能運(yùn)行的,所以大家可以簡單的建個flex項(xiàng)目就ok了,下面就開始我們的demo。在最后會把整個工程源碼提供出來,歡迎下載。 我們新建工程,有一個cairngr

2、om的swc包一定要引進(jìn)去才行的哈,不然是不能成功的,所以大家可以cairngrom的官方網(wǎng)站上去下載哈,我在這里提供地址,方便大家去下載 先把我剛寫的一個小demo的部署結(jié)構(gòu)給大家看看, 下面我會一一講解每個包中應(yīng)方的類,每個包的命名都是很規(guī)范的,這樣大家就很清晰的理解你寫的代碼的意思,所以建議大家不要輕易改變這么命名。我先說說這里的包,既然是mvc框架的話,當(dāng)然我們要把哪些是m,哪些是v以及哪些是c給分出來。m主要是模型,我們從命名也許也能猜到了,model和vo應(yīng)該都?xì)w屬于該層了,它主要是存放的是數(shù)據(jù)模型,vo中存的就是普通的數(shù)據(jù),一般的話都是最小單位的數(shù)據(jù),是不能進(jìn)行再次分解的數(shù)據(jù),代

3、碼如下: java代碼 1. packageorg.rjb.vo 2. 3. importcom.adobe.cairngorm.vo.ivalueobject; 4. /一般情況下,我們需要實(shí)現(xiàn)框架中的ivalueobject接口 5. publicclassuservoimplementsivalueobject 6. /存放用戶名 7. publicvarusername:string; 8. /存放密碼 9. publicvarpassword:string; 10. 11. package org.rjb.voimport com.adobe.cairngorm.vo.ivalueo

4、bject; /一般情況下,我們需要實(shí)現(xiàn)框架中的ivalueobject接口public class uservo implements ivalueobject/存放用戶名public var username:string;/存放密碼public var password:string;而model中的數(shù)據(jù)一般是包括相應(yīng)的vo對象以及一些相關(guān)的應(yīng)用變量,比如說系統(tǒng)狀態(tài)什么的,當(dāng)然要按自己的意思來了,并且我們一般把它做成單例類,前面我有篇文章就是講單例模式的,并對比了java和actionscript3.0中不同的實(shí)現(xiàn)方式,如果還不是很了解的話大家可以去參考下。下面是改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. /存放一些狀態(tài)變量 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;/存放一些狀態(tài)變量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設(shè)成單例類的話我們可以保證系統(tǒng)的數(shù)據(jù)得到同意,并且我們會把它設(shè)置為綁定模式,可以和接下來說的view包下的視圖類進(jìn)行數(shù)據(jù)綁定。view包下前面說了,是存放相關(guān)的視圖的,可以是as的也可以是mxml的,看大家的意思了,比如說我們可以存放些自定義的組建或擴(kuò)展的組件等,下面是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包,其實(shí)這個包我們和接下來說的commands包合并,我在這就分開了,為的是使結(jié)構(gòu)更加清晰哈,在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. /我們可以在這里加入額外的變量,當(dāng)然是我們需要的哈 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;/我們可以在這里加入額外的變量,當(dāng)然是我們需要的哈public var uservo:uservo;public function loginevent(uservo:uservo)super(login_event);this.uservo=uservo;override public function clone():eventreturn new loginevent(uservo);好了,我們繼續(xù)說說在command包下的東東哈,在這里的話主要是存放我們自定義的事件一旦發(fā)生的時候,我們究竟要怎么處理它,所以在

14、這下面是我們自定義的類似監(jiān)聽事件的類,但是在這些類中我們一般只相當(dāng)于一個事件處理的接口,我們會把真正的處理轉(zhuǎn)交給business中的代理類中,尤其是進(jìn)行遠(yuǎn)程調(diào)用的時候最常用,下面是我們的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. /引用單例數(shù)據(jù)模型 18. publicvarusermodellocator:usermodellocator=usermodellocator.getinstanc

16、e(); 19. 20. publicfunctionlogincommand() 21. 22. 23. 24. /此處為處理入口,一般我們轉(zhuǎn)交給代理類處理 25. publicfunctionexecute(event:cairngormevent):void 26. varlogindelegate:logindelegate=newlogindelegate(this); 27. varloginevent:loginevent=loginevent(event); 28. logindelegate.login(loginevent.uservo); 29. 30. /返回的結(jié)果進(jìn)行

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/引用單例數(shù)據(jù)模型public var usermodellocator:usermodellocator=usermodellocator.getinstance();public func

20、tion logincommand() /此處為處理入口,一般我們轉(zhuǎn)交給代理類處理public function execute(event:cairngormevent):voidvar logindelegate:logindelegate=new logindelegate(this);var loginevent:loginevent=loginevent(event);logindelegate.login(loginevent.uservo);/返回的結(jié)果進(jìn)行處理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包下的類,這個下面主要是負(fù)責(zé)分發(fā)事件的,我們要把我們的自定義事件和我們的相應(yīng)的處理方法關(guān)聯(lián)起來,都是在這里進(jìn)行的,通常一個類就可以了,下面是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);最后我們就說說我們的代理類哈,代理類前面已經(jīng)說了是我們的真正的處理類,我們把視圖區(qū)的數(shù)據(jù)傳到這里進(jìn)行處理,最好把結(jié)果返回到相應(yīng)的iresponsder接口實(shí)現(xiàn)類中,下面是我們的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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論