flex流行mvc框架之cairngorm小試牛刀

上傳人:仙*** 文檔編號:28611157 上傳時間:2021-09-02 格式:DOC 頁數(shù):10 大?。?57.54KB
收藏 版權(quán)申訴 舉報 下載
flex流行mvc框架之cairngorm小試牛刀_第1頁
第1頁 / 共10頁
flex流行mvc框架之cairngorm小試牛刀_第2頁
第2頁 / 共10頁
flex流行mvc框架之cairngorm小試牛刀_第3頁
第3頁 / 共10頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《flex流行mvc框架之cairngorm小試牛刀》由會員分享,可在線閱讀,更多相關(guān)《flex流行mvc框架之cairngorm小試牛刀(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。

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

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

3、行再次分解的數(shù)據(jù),代碼如下: Java代碼 1. packageorg.rjb.vo 2. { 3. importcom.adobe.cairngorm.vo.IValueObject; 4. //一般情況下,我們需要實現(xiàn)框架中的IValueObject接口 5. publicclassUserVOimplementsIValueObject{ 6. //存放用戶名 7. publicvaruserName:String; 8. //存放密碼 9. publicvarpassword:String; 10. } 11. } package or

4、g.rjb.vo { import com.adobe.cairngorm.vo.IValueObject; //一般情況下,我們需要實現(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)然要按自己的意思來了,并且我們一般把它做

5、成單例類,前面我有篇文章就是講單例模式的,并對比了java和actionscript3.0中不同的實現(xiàn)方式,如果還不是很了解的話大家可以去參考下。下面是改model類: Java代碼 1. packageorg.rjb.model 2. { 3. importcom.adobe.cairngorm.model.ModelLocator; 4. 5. importorg.rjb.vo.UserVO; 6. [Bindable] 7. publicclassUserModelLocatorimplementsModelLocator 8. { 9. //存

6、放vo對象 10. publicvaruserVO:UserVO; 11. //存放一些狀態(tài)變量 12. publicvarstate:String="User---Login"; 13. //單例對象 14. privatestaticvarmodelLocator:UserModelLocator; 15. 16. publicstaticfunctiongetInstance():UserModelLocator{ 17. if(modelLocator==null){ 18. modelLocator=newUserModelLocator(new

7、SingleClass()); 19. } 20. returnmodelLocator; 21. } 22. 23. publicfunctionUserModelLocator(single:SingleClass){ 24. if(single==null){ 25. thrownewError("YouCanOnlyHaveOneUserModelLocator"); 26. } 27. 28. } 29. } 30. } 31. classSingleClass{} package org.rjb.model { imp

8、ort com.adobe.cairngorm.model.ModelLocator; import org.rjb.vo.UserVO; [Bindable] public class UserModelLocator implements ModelLocator { //存放vo對象 public var userVO:UserVO; //存放一些狀態(tài)變量 public var state:String="User---Login"; //單例對象 private static var modelLocator:UserMo

9、delLocator; public static function getInstance():UserModelLocator{ if(modelLocator==null){ modelLocator=new UserModelLocator(new SingleClass()); } return modelLocator; } public function UserModelLocator(single:SingleClass){ if(single==null){ throw new Error

10、( "You Can Only Have One UserModelLocator" ); } } } } class SingleClass{} 設(shè)成單例類的話我們可以保證系統(tǒng)的數(shù)據(jù)得到同意,并且我們會把它設(shè)置為綁定模式,可以和接下來說的view包下的視圖類進行數(shù)據(jù)綁定。view包下前面說了,是存放相關(guān)的視圖的,可以是as的也可以是mxml的,看大家的意思了,比如說我們可以存放些自定義的組建或擴展的組件等,下面是LoginPanel.mxml的代碼: Java代碼 1.

11、 2. 4.

12、elLocator.getInstance(); 11. //提交的出來方法 12. privatefunctionsubmit():void{ 13. varuserVO:UserVO=newUserVO; 14. userVO.userName=this.userName.text; 15. userVO.password=this.password.text; 16. varloginEvent:LoginEvent=newLoginEvent(userVO); 17. CairngormEventDispatcher.getInstance().dispat

13、chEvent(loginEvent); 18. } 19. //重置的出來方法 20. privatefunctionreset():void{ 21. this.userName.text=""; 22. this.password.text=""; 23. } 24. //返回的處理方法 25. privatefunctionreturnToLogin():void{ 26. this.currentState=""; 27. modelLovator.state="User---Login"; 28. reset(); 29. } 3

14、0. ]]> 31. 32. 33. 34. 35. 36.

15、="text1"/> 37. 38. 39. 40. 41. 42. 43. 44.

16、tChild"relativeTo="{vbox1}"> 45. 46. 47. 48.

17、 49. 50. 51. 52. 53. 54.

18、d="form1"> 55. 56. 57. 58. 59.

19、 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.

20、xmlns:mx=" layout="absolute" width="400" height="300" horizontalAlign="center" verticalAlign="middle">

21、rVO; [Bindable] private var modelLovator:UserModelLocator=UserModelLocator.getInstance(); //提交的出來方法 private function submit():void{ var userVO:UserVO=new UserVO; userVO.userName=this.userName.text; userVO.password=this.password.text; var loginEvent:LoginEvent=new

22、LoginEvent(userVO); CairngormEventDispatcher.getInstance().dispatchEvent(loginEvent); } //重置的出來方法 private function reset():void{ this.userName.text=""; this.password.text=""; } //返回的處理方法 private function returnToLogin():void{ this.currentState=""; mod

23、elLovator.state="User---Login"; reset(); } ]]>

24、ly="Courier New" fontSize="36" color="#EC175D" id="text1"/>

26、="188" label="return" click="returnToLogin()"/>

27、 horizontalCenter="4" verticalCenter="1" id="form1">

28、Password="true" id="password" text="pass"/> 接下來我們說說e

29、vent包,其實這個包我們和接下來說的commands包合并,我在這就分開了,為的是使結(jié)構(gòu)更加清晰哈,在event包下我們存放的是我們自定義的事件,比如下面的LoginEvent.as: Java代碼 1. packageorg.rjb.event 2. { 3. importcom.adobe.cairngorm.control.CairngormEvent; 4. 5. importflash.events.Event; 6. 7. importorg.rjb.vo.UserVO; 8. 9. publicclassLoginEventexten

30、dsCairngormEvent 10. { 11. //定義事件類型常量 12. publicstaticconstLOGIN_EVENT:String="login"; 13. //我們可以在這里加入額外的變量,當(dāng)然是我們需要的哈 14. publicvaruserVO:UserVO; 15. publicfunctionLoginEvent(userVO:UserVO) 16. { 17. super(LOGIN_EVENT); 18. this.userVO=userVO; 19. } 20. 21. overridepublicfun

31、ctionclone():Event 22. { 23. returnnewLoginEvent(userVO); 24. } 25. } 26. } package org.rjb.event { import com.adobe.cairngorm.control.CairngormEvent; import flash.events.Event; import org.rjb.vo.UserVO; public class LoginEvent extends CairngormEvent { //定義事件類型常量

32、public 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():Event { return new LoginEvent(userVO); }

33、 } } 好了,我們繼續(xù)說說在command包下的東東哈,在這里的話主要是存放我們自定義的事件一旦發(fā)生的時候,我們究竟要怎么處理它,所以在這下面是我們自定義的類似監(jiān)聽事件的類,但是在這些類中我們一般只相當(dāng)于一個事件處理的接口,我們會把真正的處理轉(zhuǎn)交給business中的代理類中,尤其是進行遠程調(diào)用的時候最常用,下面是我們的LoginCommand類: Java代碼 1. mand 2. { 3. mands.ICommand; 4. importcom.adobe.cairngorm.control.CairngormEvent; 5. 6. i

34、mportmx.controls.Alert; 7. importmx.core.Application; 8. importmx.rpc.IResponder; 9. importmx.rpc.events.ResultEvent; 10. 11. importorg.rjb.business.LoginDelegate; 12. importorg.rjb.event.LoginEvent; 13. importorg.rjb.model.UserModelLocator; 14. 15. publicclassLoginCommandimplemen

35、tsICommand,IResponder 16. { 17. //引用單例數(shù)據(jù)模型 18. publicvaruserModelLocator:UserModelLocator=UserModelLocator.getInstance(); 19. 20. publicfunctionLoginCommand(){ 21. 22. } 23. 24. //此處為處理入口,一般我們轉(zhuǎn)交給代理類處理 25. publicfunctionexecute(event:CairngormEvent):void{ 26. varloginDelegate

36、:LoginDelegate=newLoginDelegate(this); 27. varloginEvent:LoginEvent=LoginEvent(event); 28. loginDelegate.login(loginEvent.userVO); 29. } 30. //返回的結(jié)果進行處理 31. publicfunctionresult(data:Object):void{ 32. varresult:String=data.toString(); 33. if(result=="OK"){ 34. mx.core.Application.app

37、lication.loginPanel.currentState="success"; 35. userModelLocator.state="Login---Result"; 36. }else{ 37. mx.core.Application.application.loginPanel.currentState="fail"; 38. userModelLocator.state="Login---Result"; 39. } 40. } 41. //處理過程出錯時的處理 42. publicfunctionfault(info:Object):void{

38、 43. mx.controls.Alert.show(info+""); 44. } 45. 46. } 47. } package mand { import mands.ICommand; import com.adobe.cairngorm.control.CairngormEvent; import mx.controls.Alert; import mx.core.Application; import mx.rpc.IResponder; import mx.rpc.events.ResultEvent; impo

39、rt 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 function LoginC

40、ommand(){ } //此處為處理入口,一般我們轉(zhuǎn)交給代理類處理 public function execute(event:CairngormEvent):void{ var loginDelegate:LoginDelegate=new LoginDelegate(this); var loginEvent:LoginEvent=LoginEvent(event); loginDelegate.login(loginEvent.userVO); } //返回的結(jié)果進行處理 public

41、 function result(data:Object):void{ var result:String=data.toString(); if(result=="OK"){ mx.core.Application.application.loginPanel.currentState="success"; userModelLocator.state="Login---Result"; }else{ mx.core.Application.application.loginPanel.currentState="fail";

42、 userModelLocator.state="Login---Result"; } } //處理過程出錯時的處理 public function fault(info:Object):void{ mx.controls.Alert.show(info+""); } } } 再說說這個控制類,也就是control包下的類,這個下面主要是負責(zé)分發(fā)事件的,我們要把我們的自定義事件和我們的相應(yīng)的處理方法關(guān)聯(lián)起來,都是在這里進行的,通常一個類就可以了,下面是LoginControl.as的源碼: Java代碼 1. packag

43、eorg.rjb.control 2. { 3. importcom.adobe.cairngorm.control.FrontController; 4. 5. importorg.rjb.event.LoginEvent; 6. mand.LoginCommand; 7. 8. publicclassLoginControlextendsFrontController 9. { 10. publicfunctionLoginControl(){ 11. this.initialiseCommands(); 12. } 13. 14.

44、 publicfunctioninitialiseCommands():void{ 15. this.addCommand(LoginEvent.LOGIN_EVENT,LoginCommand); 16. } 17. } 18. } package org.rjb.control { import com.adobe.cairngorm.control.FrontController; import org.rjb.event.LoginEvent; import mand.LoginCommand; public class Lo

45、ginControl extends FrontController { public function LoginControl(){ this.initialiseCommands(); } public function initialiseCommands():void{ this.addCommand(LoginEvent.LOGIN_EVENT,LoginCommand); } } } 最后我們就說說我們的代理類哈,代理類前面已經(jīng)說了是我們的真正的處理類,我們把視圖區(qū)的數(shù)據(jù)傳到這里進行處理,最好把結(jié)果返回到相應(yīng)的IRe

46、sponsder接口實現(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. publicfunctionLoginDelegate(responder:IResponder){ 11. this.

47、responder=responder; 12. } 13. publicfunctionlogin(userVO:UserVO):void{ 14. varresult:Object; 15. if(userVO.userName=="ljp"&&userVO.password=="pass"){ 16. result="OK"; 17. }else{ 18. result="Fail"; 19. } 20. responder.result(result); 21. } 22. } 23. } package org.rjb.busines

48、s { import mx.rpc.IResponder; import org.rjb.vo.UserVO; public class LoginDelegate { public var responder:IResponder; public function LoginDelegate(responder:IResponder){ this.responder=responder; } public function login(userVO:UserVO):void{ var result:Object;

49、if(userVO.userName=="ljp"&&userVO.password=="pass"){ result="OK"; }else{ result="Fail"; } responder.result(result); } } } 好了,基本介紹完了,我們可以測試下了哈,下面是測試代碼CairngormTest.mxml: Java代碼 1. 2. 6. 7. 8. 9.

51、view="org.rjb.view.*" xmlns:control="org.rjb.control.*" > , 看看效果吧,當(dāng)我們運行的時候界面是這樣的: 當(dāng)我們點擊submit時如果成功則出現(xiàn)的結(jié)果是這樣的: 當(dāng)我們輸入的賬號密碼錯誤時,出現(xiàn)如下的界面: 好了,這Cairngorm的小demo就到這了,希望能讓大家有所收獲...

展開閱讀全文
溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!