解析Flex事件執行流程
本文和大家重點討論一下Flex事件機制,Flex事件執行流程大致可以分為三個階段,下面為你一一介紹。
Flex事件機制
Flex事件執行流程大致可以分為三個階段。
第一階段為捕獲階段
第二階段為目標階段
第三階段為冒泡階段
所以:addEventListener方法注冊的監聽器有兩種,第一種是處理捕獲階段的監聽器(addEventListener的第三個參數useCapture 為true)
第二種就是處理目標和冒泡階段的監聽器(第三個參數useCapture 為false)。
第一階段:捕獲階段流程
Flex會去查找事件的觸發源,它是通過根顯示元素(root display object)逐層向下尋蹤,并從上往下,依次觸發這些節點的當前Flex事件的處理函數(如果他們都用捕獲階段的監聽器注冊了這個事件)直到找到事件發起源頭的父節點。并觸發完父節點的這個事件為止。但它不會調用事件觸發源節點的事件。
例如:
test.mxml文件下:
application節點--vbox(id=vb)節點--button(id=bt)節點。
如果在application的creationComplete中:將以上所有組件的click事件注冊為捕獲監聽器。
如:
- addEventListener(MouseEvent.CLICK, btnClick2, true);
- vb.addEventListener(MouseEvent.CLICK, btnClick3,true);
- bt.addEventListener(MouseEvent.CLICK, btnClick4,true);
如果在bt上點擊,執行流程如下:
Flash Player會去查找Flex事件的觸發源(bt),通過根顯示元素(root display object)(這里就是application)逐層向下尋蹤,并從上往下,依次調用它們的click事件(如果他們都注冊了捕獲階段的click事件)直到找到事件的發起源頭的父節點,上面例子中會找到vb,并執行完vb的click事件后,就不再查找下邊的bt組件和執行它的click事件。
第二階段:
一般情況下,第二階段的目標階段,也是執行mxml文檔的目標節點配置的那個事件處理函數,然后再處理對應的監聽器(處理目標和冒泡階段的監聽器)注冊的那個處理函數。
如果文檔該節點,沒有配置Flex事件處理,則只執行通過addEventListener注冊的事件處理方法,否則,如果配置了,就先執行mxml的配置函數處理,接著處理通過監聽器注冊的函數。
最后就是冒泡階段:
這個階段與捕獲階段相反,它會從從目標節點的父節點開始依次向上查找并執行父節點的mxml配置事件和通過監聽器注冊的事件處理函數。(這些處理函數也是用處理目標和冒泡階段的監聽器注冊的)
也就是說:捕獲階段的事件觸發只能是用處理這個階段的監聽器去注冊。目標和冒泡階段的事件觸發,也只能是處理這個階段的監聽器去注冊。如果,要讓同一個事件,在捕獲階段或目標和冒泡階段都執行的話,需要用addEventListener注冊兩次,將第三個參數useCapture true和false各設置一次。
【編輯推薦】
- Flex事件處理三要素
- 從Flex Builder更名看Flash平臺戰略
- Flex及FlexBuilder2.0開發環境詳解
- FlexBuilder3.0與Eclipse3.4的完美結合
- 學習筆記 FlexBuilder2.0中如何使用基于Lists的控件

















