專利名稱:一種flex中利用事件機(jī)制在模塊間傳遞數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及flex開發(fā)中的一種在各模塊之間傳遞數(shù)據(jù)的方法。該方法快速, 可靠,可以方便的實(shí)現(xiàn)各模塊之間的交互,易用性強(qiáng),維護(hù)方便,且大大降低了 模塊之間的耦合度,使各模塊更加獨(dú)立。
背景技術(shù):
目前,在flex中實(shí)現(xiàn)模塊間傳遞數(shù)據(jù)的方法主要是通過兩個(gè)模塊之間方法屬 性的調(diào)用來實(shí)現(xiàn)的,例如在模塊A中訪問模塊B的屬性或方法,使模塊A的數(shù)據(jù) 傳遞到模塊B中。由于flex中的模塊并不是隨程序的啟動(dòng)而加載,而是在程序運(yùn) 行期間動(dòng)態(tài)加載的,如果模塊B尚未加載,這時(shí)模塊A訪問模塊B的屬性或方法 就會(huì)拋出異常,只有在模塊B已經(jīng)加載的情況下,模塊A才能正常運(yùn)行,這樣模 塊A就對(duì)模塊B有了一定的依賴性,從而增加了模塊間的耦合度。另外,由一個(gè) 模塊向多個(gè)模塊傳遞數(shù)據(jù)時(shí),需要重復(fù)訪問外部模塊的屬性或方法,如果需要傳 遞的數(shù)據(jù)比較多,就會(huì)使代碼看起來比較雜亂,不利于后期的維護(hù)和修改。
發(fā)明內(nèi)容
木發(fā)明的目的是在flex開發(fā)中提供一種方便,可靠,易于維護(hù)的模塊間傳遞 數(shù)據(jù)的方法。
本發(fā)明的目的是按以下方式實(shí)現(xiàn)的,該方法利用flex自帶的事件傳播機(jī)制, 將數(shù)據(jù)封裝到事件中,以事件為載體把待傳遞的數(shù)據(jù)傳遞出去,同時(shí)在目的模塊 中設(shè)置對(duì)該事件的監(jiān)聽,當(dāng)監(jiān)聽到該事件后,在目的模塊中調(diào)用相應(yīng)的處理方法 將事件中的數(shù)據(jù)分離出來。
方法包括
a. 在數(shù)據(jù)所在的源模塊中創(chuàng)建自定義事件,將要傳遞的數(shù)據(jù)封裝到該事件中;
b. 以flex主程序作為發(fā)送事件的對(duì)象,將定義的事件分發(fā)出去;
c. 在目標(biāo)模塊中設(shè)置事件監(jiān)聽器,用于監(jiān)聽攜帶數(shù)據(jù)的事件,監(jiān)聽到該事件 以后,調(diào)用相應(yīng)的處理方法把數(shù)據(jù)從事件中讀取出來并傳遞到目標(biāo)模塊的變量中。
本發(fā)明的方法主要優(yōu)點(diǎn)如下
以主程序作為分發(fā)事件和監(jiān)聽事件的對(duì)象,簡(jiǎn)化了事件流的處理過程,消除 了對(duì)其他模塊的依賴性。
在數(shù)據(jù)的源模塊中分發(fā)事件,方便對(duì)數(shù)據(jù)進(jìn)行封裝;在數(shù)據(jù)的目的模塊中對(duì) 事件設(shè)置監(jiān)聽,有利于數(shù)據(jù)的分離和使用。
可以在多個(gè)模塊中設(shè)置對(duì)事件的監(jiān)聽,從 將數(shù)據(jù)傳遞到多個(gè)模塊中,實(shí)現(xiàn)了數(shù)據(jù)的廣播。
木發(fā)明的優(yōu)異效果是,從該方法的實(shí)現(xiàn)中可以看出,該方法結(jié)構(gòu)清晰,使用方 便,易于維護(hù),加載模塊時(shí)消除了對(duì)其他模塊的依賴性,并且方便的實(shí)現(xiàn)了數(shù)據(jù)
的廣播是一種在flex模塊間傳遞數(shù)據(jù)的方便,可靠的方法。
具體實(shí)施例方式
實(shí)施例
假設(shè)現(xiàn)有模塊A,模塊B,模塊B需要模塊A中的數(shù)據(jù),利用事件機(jī)制在模塊
之間傳遞數(shù)據(jù)的方法如下
1) 自定義事件類DataEvent,用來保存和傳遞數(shù)據(jù),要傳遞的數(shù)據(jù)的類型可 以是系統(tǒng)n」'識(shí)別的任何類型,并且支持自定義的數(shù)據(jù)類型。該事件類繼承自 flash, events. Event類,并添加 -個(gè)或多個(gè)成員變量,用于保存要傳遞的數(shù)據(jù)。
2) 在模塊A中創(chuàng)建DataEvent的實(shí)例,并將需要傳遞的數(shù)據(jù)保存到步驟1中 定義的變量中,然后以主程序作為分發(fā)事件的對(duì)象將該DataEvent事件分發(fā)出去。
3) 在模塊B中,設(shè)置對(duì)步驟2中所創(chuàng)建事件實(shí)例的監(jiān)聽。監(jiān)聽到主程序分發(fā) 的事件后,模塊B調(diào)用相應(yīng)的處理方法,將該事件中攜帶的數(shù)據(jù)分離出來。這樣 就實(shí)現(xiàn)了數(shù)據(jù)從模塊A到模塊B的傳遞。
當(dāng)需要把模塊A中的數(shù)據(jù)傳遞到多個(gè)模塊中時(shí),可依此方法在多個(gè)模塊中設(shè)置 監(jiān)聽和處理事件以及讀取數(shù)據(jù),該方法通過以下步驟實(shí)現(xiàn)
1)自定義事件類,該事件類繼承自flash, events. Event類,并添加一個(gè)或 多個(gè)成員變量,用來保存要傳遞的數(shù)據(jù)。
類文件名DataEvent. as
package
import flash, events. Event; 〃導(dǎo)入事件類 public class DataEvent extends Event
//疾存要傳週教薪,^"體多,雜艦^體。 public var da_ta:String;
//縦微,加e舒^,伴艦志,脇"s諧示辦射為嫌靴 c朋ce7a/^諧^^秀^"以燈i/:與,伊裙關(guān)凝游/f為。
public function DataEvent(type:String, bubbles:Boolean二false, cancelable:Boolean=false)
super(type, bubbles, cancelable);該文件定義了一個(gè)事件類,用來保存和傳遞數(shù)據(jù),要傳遞的數(shù)據(jù)的類型可以是 系統(tǒng)可識(shí)別的任何類型,并且支持自定義的數(shù)據(jù)類型。
2) 在模塊A中創(chuàng)建DataEvent的實(shí)例,并將需要傳遞的數(shù)據(jù)保存到data變量 中,然后以主程序作為分發(fā)事件的對(duì)象將該DataEvent事件分發(fā)出去。
模塊A中的內(nèi)容
<mx:Module' xmlns:mx="http://www. adobe, com/2006/mxml" layout二〃absolute〃〉 〈mx:Script> 〈![CDATA[
private function onclick(e:Event):void{
//維從乂享/柳劣銀,訓(xùn)0^銀鄉(xiāng)體分事,絲。 var d已taEvent:DataEvent二new DataEvent(〃myevent〃);
//把要/線微微殺他te變鉀。
d3taEvent. data mydeit3〃 ;
/7把覆微娜,iA發(fā)忠去。
this. parentApplication. dispatchEverU (dataEvent);
]]>
</mx:Script>
〈mx:Canvas x=〃10〃 y二〃10〃 width=〃380〃 height=〃280〃 borderStyle solid" borderThickness=〃2〃>
〈mx:Button x=〃149〃 y二〃107〃 label=〃Button〃 click二〃onclick(event)7>
</mx:Canvas〉
</mx:Module〉
該模塊中,當(dāng)點(diǎn)擊button按鈕時(shí),就會(huì)觸發(fā)click事件,然后調(diào)用onclick 方法,將事件分發(fā)出去。this.parentA卯lication表示該flex程序的主程序, 該模塊中由主程序作為分發(fā)事件的對(duì)象。
3) 在模塊B中,設(shè)置對(duì)事件myevent的監(jiān)聽。監(jiān)聽到myevent后,調(diào)用相應(yīng) 的處理方法,將myevent中攜帶的數(shù)據(jù)分離出來。
模塊B中的內(nèi)容
〈mx:Module xmlns :mx=http://www. adobe. com/2006/m,l layout=〃absolute〃 width=〃400〃 height=〃300〃creationComplete="oncreate() 〃〉
<mx:Script〉
〈! [CDATA[
private function oncreate():void{
//體恭7e固t享微藩,浙鄉(xiāng)f證,冊(cè)t膽遂療顏。this. parentApplication. addEventU stener (〃myevent〃, onevent);
private function onevent(e:DataEvent):void{房,攀麗t辦,#,冊(cè)淳腫覆,微教變耽絲。textAres. text=e. data;
]]>
〈/mx:Script〉
<mx:Canvas x二〃10〃 y=〃10〃 width=〃380〃 height=〃280〃 bo:rde:rSl;yle二〃solid〃borderThickness二〃2"〉
〈mx:TextArea id=〃textArea〃 x=〃101〃 y=〃107〃/>〈/nix: Canvas>〈/mx:Module>
該模塊中,當(dāng)模塊B創(chuàng)建完成時(shí)調(diào)用oncreate方法,設(shè)置對(duì)myevent事件的監(jiān)聽,由this. parentApplication即主程序來監(jiān)聽myevent事件,當(dāng)主程序監(jiān)聽到myevent事件后調(diào)用onevent方法處理該事件,將事件中攜帶的數(shù)據(jù)讀取出來。這樣就實(shí)現(xiàn)了數(shù)據(jù)從模塊A到模塊B的傳遞。
當(dāng)需要把模塊A中的數(shù)據(jù)傳遞到多個(gè)模塊中時(shí),可按照模塊B中設(shè)置監(jiān)聽和處理事件的方式在其他模塊中設(shè)置監(jiān)聽以及讀取數(shù)據(jù)。
權(quán)利要求
1、一種flex中利用事件機(jī)制在模塊間傳遞數(shù)據(jù)的方法,其特征在于方法包括a.在數(shù)據(jù)所在的源模塊中創(chuàng)建自定義事件,將要傳遞的數(shù)據(jù)封裝到該事件中;b.以flex主程序作為發(fā)送事件的對(duì)象,將定義的事件分發(fā)出去;c.在目標(biāo)模塊中設(shè)置事件監(jiān)聽器,用于監(jiān)聽攜帶數(shù)據(jù)的事件,監(jiān)聽到該事件以后,調(diào)用相應(yīng)的處理方法把數(shù)據(jù)從事件中讀取出來并傳遞到目標(biāo)模塊的變量中;d.將flex主程序作為發(fā)送事件和監(jiān)聽事件的對(duì)象,在運(yùn)行過程中,主程序一直存在,不會(huì)出現(xiàn)發(fā)送事件的對(duì)象或監(jiān)聽事件的對(duì)象不存在的情況,消除了模塊間的依賴性;e.在數(shù)據(jù)的源模塊和目標(biāo)模塊中分發(fā)事件和設(shè)置事件監(jiān)聽,就近調(diào)用處理方法來封裝和分離要傳遞的數(shù)據(jù);f.在多個(gè)不同的模塊中對(duì)同一個(gè)事件進(jìn)行監(jiān)聽,將數(shù)據(jù)傳遞到多個(gè)模塊中,供多個(gè)模塊使用,實(shí)現(xiàn)了數(shù)據(jù)的廣播;當(dāng)需要把一個(gè)模塊中的數(shù)據(jù)傳遞到多個(gè)模塊中并在多個(gè)模塊中設(shè)置監(jiān)聽和處理事件以及讀取數(shù)據(jù)時(shí),通過以下步驟實(shí)現(xiàn)1)自定義事件類,該事件類繼承自flash.events.Event類,并添加一個(gè)或多個(gè)成員變量,用來保存要傳遞的數(shù)據(jù);類文件名DataEvent.aspackage{import flash.events.Event;//導(dǎo)入事件類public class DataEvent extends Event{//保存要傳遞的數(shù)據(jù),可設(shè)置多個(gè)這樣的成員變量;public var data:String;//構(gòu)造函數(shù),type用于區(qū)分事件的標(biāo)志,bubbles指示事件是否為冒泡事件,cancelable指示是否可以阻止與事件相關(guān)聯(lián)的行為;public function DataEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false){super(type,bubbles,cancelable);}}}該文件定義了一個(gè)事件類,用來保存和傳遞數(shù)據(jù),要傳遞的數(shù)據(jù)的類型可以是系統(tǒng)可識(shí)別的任何類型,并且支持自定義的數(shù)據(jù)類型;2)設(shè)定在模塊A中創(chuàng)建DataEvent的實(shí)例,并將需要傳遞的數(shù)據(jù)保存到data變量中,然后以主程序作為分發(fā)事件的對(duì)象將該DataEvent事件分發(fā)出去;模塊A中的內(nèi)容<mx:Module xmlns:mx=″http://www.adobe.com/2006/mxml″layout=″absolute″><mx:Script><![CDATA[private function onclick(e:Event):void{//創(chuàng)建自定義事件的實(shí)例,myevent為監(jiān)聽時(shí)用來區(qū)分事件的標(biāo)志;var dataEvent:DataEvent=new DataEvent(″myevent″);//把要傳遞的數(shù)據(jù)保存到data變量中;dataEvent.data=″mydata″;//把攜帶數(shù)據(jù)的事件分發(fā)出去;this.parentApplication.dispatchEvent(dataEvent);}]]></mx:Script><mx:Canvas x=″10″y=″10″width=″380″height=″280″borderStyle=″solid″borderThickness=″2″><mx:Button x=″149″y=″107″label=″Button″click=″onclick(event)″/></mx:Canvas></mx:Module>該模塊中,當(dāng)點(diǎn)擊button按鈕時(shí),就會(huì)觸發(fā)click事件,然后調(diào)用onclick方法,將事件分發(fā)出去,this.parentApplication表示該flex程序的主程序,該模塊中由主程序作為分發(fā)事件的對(duì)象;3)設(shè)定在模塊B中設(shè)置對(duì)事件myevent的監(jiān)聽,監(jiān)聽到myevent后,調(diào)用相應(yīng)的處理方法,將myevent中攜帶的數(shù)據(jù)分離出來;模塊B中的內(nèi)容<mx:Module xmlns:mx=http://www.adobe.com/2006/mxmllayout=″absolute″width=″400″height=″300″creationComplete=″oncreate()″><mx:Script><![CDATA [private function oncreate():void{//設(shè)置對(duì)myevent事件的監(jiān)聽,監(jiān)聽到以后調(diào)用onevent方法進(jìn)行處理;this.parentApplication.addEventListener(″myevent″,onevent);}private function onevent(e:DataEvent):void{//處理myevent事件,將myevent事件中攜帶的數(shù)據(jù)讀取出來;textArea.text=e.data;}]]></mx:Script><mx:Canvas x=″10″y=″10″width=″380″height=″280″borderStyle=″solid″borderThickness=″2″><mx:TextArea id=″textArea″x=″101″y=″107″/></mx:Canvas></mx:Module>。
全文摘要
本發(fā)明提供一種在flex應(yīng)用程序的各模塊之間傳遞數(shù)據(jù)的方法,該方法利用flex自身的事件傳播機(jī)制,把數(shù)據(jù)封裝到自定義事件中,然后將攜帶數(shù)據(jù)的事件從源模塊傳遞到目標(biāo)模塊,然后在目標(biāo)模塊中將事件中包含的數(shù)據(jù)分離出來,供目標(biāo)模塊使用,從而達(dá)到在模塊間傳遞數(shù)據(jù)的目的。該方法操作簡(jiǎn)單,易于維護(hù),消除了模塊間的依賴性。由于其利用的是flex自身的事件傳播機(jī)制,所以傳遞數(shù)據(jù)的效率高,而且不容易出現(xiàn)錯(cuò)誤。
文檔編號(hào)G06F9/46GK101599029SQ20091001711
公開日2009年12月9日 申請(qǐng)日期2009年7月9日 優(yōu)先權(quán)日2009年7月9日
發(fā)明者邸雙朋, 健 魏 申請(qǐng)人:浪潮電子信息產(chǎn)業(yè)股份有限公司