自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

學(xué)習(xí)筆記 FlexBuilder教程中如何使用ActionScript處理事件

開發(fā) 后端
本文向大家介紹一下FlexBuilder教程中如何使用ActionScript處理事件,主要包括事件模型與機(jī)制,創(chuàng)建監(jiān)聽器兩大部分內(nèi)容,希望本文介紹能讓你有所收獲。

FlexBuilder有很多值得學(xué)習(xí)的地方,本文和大家重點(diǎn)討論一下FlexBuilder教程中如何使用ActionScript處理事件,相信通過本文的學(xué)習(xí)你對FlexBuilder中ActionScript處理事件有明確的認(rèn)識。

FlexBuilder教程中使用ActionScript處理事件

1,事件模型與機(jī)制

FlexBuilder教程中Flex的事件模型基于DOM3事件模型。通過創(chuàng)建注冊事件監(jiān)聽器(事件處理程序,事件處理器,是函數(shù)方法用于響應(yīng)指定的事件),可以在組件的實(shí)例發(fā)出某個(gè)事件(如用戶何時(shí)與界面組件交互,以及在組件的外觀或生命周期中何時(shí)發(fā)生重要的變化,如組件的創(chuàng)建或破壞或調(diào)整其大小等)時(shí),對象事件自動(dòng)派發(fā)此事件到所有注冊過的監(jiān)聽器。

1)、事件流:

當(dāng)一個(gè)事件被派發(fā)出來時(shí),事件對象從根節(jié)點(diǎn)開始自上而下開始掃描displaylist(如),一直到目標(biāo)對象,檢查每個(gè)節(jié)點(diǎn)是否有相應(yīng)的監(jiān)聽器。目標(biāo)對象指的是displaylist中產(chǎn)生事件的對象.比如:<mx:Panel><mx:HBox><mx:VBox><mx:Button/></mx:VBox></mx:HBox></mx:Panel>。如果此時(shí)resize了VBox,則會(huì)從根(Application)開始,下來檢查Panel,HBox,直到目標(biāo)對象-產(chǎn)生resize事件的VBox為止.

2)、事件的派發(fā):

Flex中可以通過dispatchEvent()方法手工派發(fā)事件,所有UIComponent的子類都可以調(diào)用此方法.語法://參數(shù)event_type是Event對象的type屬性
//函數(shù)的返回值總是True.
objectInstance.dispatchEvent(newEvent("event_type"):Boolean

可以使用此方法派發(fā)任意事件,而不僅僅是用戶自定義事件,比如:可以派發(fā)一個(gè)Button的Click事件.varresult:Boolean=buttonInstance.dispatchEvent(newEvent(MouseEvent.CLICK));

在Flex應(yīng)用中不是必須對新派發(fā)的事件進(jìn)行處理,如果觸發(fā)了一個(gè)事件,而沒有對應(yīng)的Listener時(shí),Flex忽略此事件.

如果想給Event對象添加新屬性,就必須繼承Event類,然后定義新屬性

3)、事件的傳播

FlexBuilder教程中事件觸發(fā)后,Flex有3個(gè)檢測事件監(jiān)聽器的階段,3個(gè)階段的發(fā)生的順序如下:

A.捕獲階段:在捕獲階段,Flex在顯示列表中檢查事件的祖先是否注冊了事件的監(jiān)聽器.Flex從根節(jié)點(diǎn)開始順序而下.大多數(shù)情況中,根節(jié)點(diǎn)是Application對象.同時(shí),Flex改變事件的currentTarget值.缺省情況下,在此階段,沒有容器監(jiān)聽事件.use_capture參數(shù)的值是False,在此階段添加監(jiān)聽的唯一方法是在調(diào)用add_listener時(shí),傳入一個(gè)為True值的use_capture參數(shù),比如:myAccordion.addEventListener(MouseEvent.MOUSE_DOWN,customLogEvent,true);

如果是在Mxml中添加監(jiān)聽,Flex設(shè)置此參數(shù)為False,沒有辦法進(jìn)行修改.如果設(shè)置了use_capture為True,那么事件將不會(huì)上浮.如果既想捕獲又想上浮就必須調(diào)用addEventListener兩次.一次use_capture參數(shù)為true,一次為false;捕獲很少使用,上浮的使用更為普遍.

B.目標(biāo)階段:在目標(biāo)階段,Flex激發(fā)事件的監(jiān)聽程序,不檢查其他的節(jié)點(diǎn).

C.上浮階段:事件只在bubbles屬性為True時(shí)才進(jìn)行上浮.可以上浮的事件包括:change,click,doubleClick,keyDown,keyUp,mouseDown,mouseUp.在上浮階段,Flex改變事件的currentTarget屬性,而target屬性是初始派發(fā)事件的對象.

在任意一個(gè)階段,節(jié)點(diǎn)們都有機(jī)會(huì)操作事件.比如:用戶點(diǎn)擊了一個(gè)在VBox中的Button,在捕獲階段,Flex檢查Application對象(根節(jié)點(diǎn))和VBox是否有監(jiān)聽器處理此事件.Flex然后在目標(biāo)階段觸發(fā)按鈕的監(jiān)聽器.在上浮階段,VBox和應(yīng)用以與捕獲階段相反的順序再次獲得機(jī)會(huì)處理事件.

在Actionscript3.0中,你可以在任意目標(biāo)節(jié)點(diǎn)上注冊事件監(jiān)聽器.但是部分事件會(huì)被直接傳給目標(biāo)節(jié)點(diǎn),比如Socket類.捕獲階段的節(jié)點(diǎn)順序是從父節(jié)點(diǎn)到子節(jié)點(diǎn)的,而上浮階段剛好相反.

捕獲事件缺省是關(guān)閉的,也就是說如果要捕獲事件,必須顯式指定在捕獲階段進(jìn)行處理.

每一個(gè)Event都有target和currentTarget屬性,幫助跟蹤事件傳播的過程.

4)、查詢事件階段

FlexBuilder教程使用事件的eventPhase可以獲得事件當(dāng)前的階段,

1):CAPTURE_PHASE

2):AT_TARGET

3):BUBBLING_PHASE

示例:privatefunctiondetermineState(event:MouseEvent):Void{Debug.trace(event.eventPhase+":"+event.currentTarget.id);}

5)、停止傳播

使用下面兩個(gè)函數(shù)停止事件的傳播:

stopPropagation()

stopImmediatePropagation()

2,FlexBuilder教程中如何創(chuàng)建監(jiān)聽器

組件有Flex提供的內(nèi)建事件.也可以使用派發(fā)-監(jiān)聽模型定義自己的事件監(jiān)聽器,并指定監(jiān)聽器監(jiān)聽何種事件.

有三種方式:

1),內(nèi)部MXML中的AS函數(shù)法:在MXML的<mx:Script></mx:Script>聲明中注冊監(jiān)聽器:這是第一個(gè)和使用最廣泛的方法,在MXML中定義事件發(fā)生時(shí)會(huì)調(diào)用的事件處理程序。

2),外部AS文件中的AS函數(shù)法:通過ActionScript定義注冊事件處理程序:可以通過使用ActionScript中的addEventHandler()等方法來注冊事件處理程序??蓪ddEventHandler()方法置于Application容器的creationComplete事件(在Application表單及其子級被初始化之后,在啟動(dòng)應(yīng)用程序時(shí)發(fā)生)的事件處理程序中。詳見ActionScript教程。

3),代碼混寫法:在MXML的控件標(biāo)簽中直接完全嵌入監(jiān)聽器(這也稱為使用線上事件處理程序):這樣比較直接,代碼也較少,但會(huì)導(dǎo)致代碼很難閱讀、維護(hù)和縮放。如果監(jiān)聽器是多個(gè)AS語句甚至更復(fù)雜的邏輯,不推薦此方法。
 

【編輯推薦】

  1. FlexBuilder教程教你如何使用特效豐富用戶體驗(yàn)
  2. 從Flex Builder更名看Flash平臺戰(zhàn)略
  3. Flex及FlexBuilder2.0開發(fā)環(huán)境詳解
  4. FlexBuilder3.0與Eclipse3.4的完美結(jié)合
  5. 學(xué)習(xí)筆記 FlexBuilder2.0中如何使用基于Lists的控件 

 

 

責(zé)任編輯:佚名 來源: javaeye.com
相關(guān)推薦

2010-08-02 13:47:47

FlexBuilder

2010-08-02 15:39:10

FlexBuilder

2010-08-03 15:44:08

FlexBuilder

2010-08-03 16:13:01

FlexBuilder

2010-08-06 13:22:48

FlexCSS

2010-08-03 15:30:00

FlexBuilder

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2010-05-18 13:53:34

Subversion插

2021-02-28 22:12:11

WPF標(biāo)記Handled

2010-08-03 15:36:38

FlexBuilder

2009-12-30 10:32:31

Silverlight

2010-08-03 16:03:00

FlexBuilder

2010-08-05 15:40:21

FlexBuilder

2010-05-18 13:26:16

Subversion插

2010-08-03 13:27:04

FlexBuilder

2010-08-02 15:26:27

FlexBuilder

2011-08-23 17:06:03

2010-07-30 10:37:23

Flex數(shù)據(jù)綁定

2010-08-06 13:30:31

FlexBuilder

2010-07-28 09:49:27

FlexBuilder
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號