2010年7月13日 星期二

Flex_事件

又來到了星期二,要上Flex的這一天。如果不趕快把筆記寫一寫就真的累積太多了。XD

在第四堂後半及第五堂花了一些時間說明了"事件"(event)這一個重點項目,之前在自學的時候也感覺事件真的是RIA程式開發的重頭戲,事件處理的好操作起來就只能說是行雲流水,不好就... /.\

事件這個主題大致可以分為1.事件的種類2.事件的傳遞3.事件的觸發三項。

一、事件的種類可以分為系統事件與使用者事件兩種,使用者事件因為是使用者的作為產生,所以並沒有辦法去預測,也就不會去探討事件處理的先後順序,但是系統事件則是必定會遵循一定的事件處理流程。
從程式啟動到使用者可以使用的過程共有四個事件可以使用:
1.preinitialize(程式啟動)
系統設定屬性
2.initialize(屬性設定完成)
系統建構元件
3.creationComplete(元件建構完成)←通常初始化都寫在這邊
系統排版
4.applicationComplete(排版完成)

二、事件傳遞,整個傳遞流程分為三段:擷取階段(Capture)→目標階段(Target)→上浮階段(Bubbling),而再撰寫一般的應用程式通常都不會用到擷取階段,所以呼叫擷取階段必須要下特定的參數,程式才會於該階段執行。整個傳遞流程就如下圖所示:

而事件傳遞又與在程式中常常會遇到的Target與CurrentTarget有很大的關係;Target很好理解,就是被執行的那個物件,如果是按下按鈕,那麼Target不管在何處皆是按鈕本身;CurrentTarget則會隨著事件傳遞(上浮階段)有所變化,以上圖為例,即按鈕按下後CurrentTarget(目前目標),會在事情上浮階段中從Button→Panel→Application。也就是說,我們希望Panel上面的任何物件被按下時,都發生某一個動畫,那麼就可以在Panel的mouseDown事件中寫下,event.currentTarget.要做的事情,這時候的currentTarget當然就是指Panel本身,而其他物件被點選時,就因為上浮階段而達到我們希望的效果。

三、事件觸發也分為兩種,一種是直接使用標籤語言:click="ClickHandler(event)";另一種則是在ActionScript內寫事件監聽:addEventListener。而在事件觸發當中,有一個原本沒有搞清楚的觀念,就是在ClickHandler(event)上,event是一個特殊詞,指的是傳遞相關事件給這個函式,而到底是傳遞什麼樣的事件,就要看是觸發在什麼事件上,例如:滑鼠點擊就可以傳遞滑鼠事件(event:MouseEvent),而每個事件的傳遞其實都是一大包的資訊(event.altKey、event.ctrlKey為滑鼠事件傳遞的組合鍵資訊),至於要知道Event裡面有什麼屬性,可以透過debug模式來確認。

大致上事件就是這三個大重點,似懂非懂了話會越寫越模糊,一定要先搞清楚。over

沒有留言:

張貼留言