Flex事件機(jī)制中事件注冊通道和觸發(fā)方法
你對Flex事件機(jī)制的使用是否了解,本文和大家重點(diǎn)討論一下,F(xiàn)lex事件可以看作是一種觸發(fā)機(jī)制,當(dāng)滿足了一定的條件后,會觸發(fā)這個(gè)Flex事件。比如MouseEvent就是指的當(dāng)鼠標(biāo)進(jìn)行操作之后觸發(fā)的一系列的Flex事件。
Flex事件機(jī)制介紹
1.什么是Flex事件機(jī)制
Flex事件可以看作是一種觸發(fā)機(jī)制,當(dāng)滿足了一定的條件后,會觸發(fā)這個(gè)Flex事件。比如MouseEvent就是指的當(dāng)鼠標(biāo)進(jìn)行操作之后觸發(fā)的一系列的Flex事件。很多控件中都有clickFlex事件,這個(gè)Flex事件就是一個(gè)MouseEvent的實(shí)例,當(dāng)點(diǎn)擊鼠標(biāo)后,系統(tǒng)會自動拋出一個(gè)名稱為click的MouseEventFlex事件(這種方法我們將在后面介紹到)。如果此時(shí)在click上注冊一個(gè)方法,那么觸發(fā)該Flex事件時(shí)就會執(zhí)行這個(gè)方法。
Flex主應(yīng)用的mxml代碼
- <mx:Script>
- <![CDATA[
- importmx.controls.Alert;
- privatefunctionclickHandler(e:MouseEvent){
- Alert.show(e.currentTarget.toString());
- }
- ]]>
- </mx:Script>
- <mx:Buttonidmx:Buttonid="testBtn"click="clickHandler(event)"label="測試">
- </mx:Button>
在我們寫代碼時(shí),編輯器的代碼補(bǔ)全提示列表中,有很多不同的圖標(biāo)。
那些帶有閃電的就是Flex事件,三個(gè)小塊的就是樣式,空心圓圈的是屬性,實(shí)心圓點(diǎn)的是公有方法,還有一個(gè)是效果。
我們能在這個(gè)列表中看到的Flex事件,我把它稱之為Flex事件注冊通道。(官方仍然稱它為Flex事件,但是它又和普通的Flex事件含義不同。關(guān)于Flex事件注冊通道會再下面講述到)
2.Flex事件機(jī)制中事件注冊通道
上面說到了,這些通道是只能在mxml的代碼提示中可以看到的,他的作用就是給mxml組件提供Flex事件觸發(fā)時(shí)所執(zhí)行的方法的注冊通道,而且能在代碼提示中可見,這樣給組件提供了很大的抽象的好處,我們可以很清楚的告訴組件的使用者,組件里包含哪些Flex事件給你調(diào)用。
為什么把他區(qū)別對待?除了代碼提示外,他還有一些實(shí)現(xiàn)上的不同。
Button的clickFlex事件是繼承自核心類InteractiveObject,遺憾我們看不到他的源碼,但是說明了“Flex事件注冊通道”是可以繼承的。
我們會在自定義Flex事件中講述到如何聲明“Flex事件注冊通道”。
3.Flex事件機(jī)制中事件觸發(fā)方法
注冊通道中如果填入了函數(shù),那么就代表觸發(fā)該Flex事件時(shí),會執(zhí)行這個(gè)方法。
- click="clickHandler(event)"
我們看到這個(gè)方法有一個(gè)event對象作為參數(shù)傳入,新人可能會問到,這個(gè)event對象哪里來的?我也沒聲明這個(gè)變量啊。他實(shí)際上是注冊通道傳給他的,默認(rèn)變量名就是event。我們?nèi)绻朐贔lex事件觸發(fā)時(shí)傳其他的參數(shù),可以通過自定的Flex事件對象來實(shí)現(xiàn)。
這個(gè)對象就是這個(gè)組件分發(fā)的Flex事件對象,即type為“click”的MouseEvent的一個(gè)實(shí)例。
這個(gè)event對象包含了觸發(fā)該Flex事件時(shí)的各種信息,比如觸發(fā)Flex事件對象是哪個(gè),監(jiān)聽對象是哪個(gè),觸發(fā)時(shí)鼠標(biāo)點(diǎn)在哪里等等,不同的event類會包含不同的屬性,比如KeyboardEvent包含了鍵盤點(diǎn)擊了哪個(gè)鍵。我們也可以通過自定義一個(gè)Flex事件類,來傳遞我們自己想要的各種信息。
【編輯推薦】