FLEX事件中幾個概念的理解

 

你可以將事件對象本身傳遞給方法.每當組件觸發一個事件,這個組件都會發送一個Event類型的對象,所有事件監聽對象都可以接受.例如:

 

1、事件對象。即實際傳遞時的event,它包含了很多內容,如:event.target.id。

還有人說:event作爲一個關鍵字來使用,而非自定義變量,因此我們可以在標籤中直接使用event來創建當前組件所觸發的事件對象。

2、target。是指某個事件如mouse.click進行點擊的對象,所以一般是按鈕等。

3、type。Event的構造函數如下所示。

public function Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)
參數說明:
type:事件的類型。例如鼠標單擊的事件類型爲MouseEvent.CLICK。事件的類型可以通過Event.type獲得。

this.addEventListener(MouseEvent.CLICK,blackHandler);

4、事件監聽器及註冊。

軟件開發者在開發過程中只關注某個組件響應某個事件後所做的操作,即被驅動的操作,而不用像結構化線形開發那樣去關注驅動事件的動作。響應特定事件的組件叫做事件監聽器(EventListener)。

註冊事件偵聽器時,使用EventDsipatcher類中的AddEventLsitener()方法即可。AddEventLsitener()的接口如下所示:
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

type參數表明事件監聽器的類型,如鼠標單擊事件(MouseEvent.CLICK);listener參數是事件監聽器的具體方法;useCapture參數設定是否在事件的捕獲階段就進行響應;priority參數設定事件監聽器的優先級;useWeakReference參數設定事件監聽器方法是否爲弱類型,一個強類型的事件監聽器方法是不會被Flex進行自動垃圾收集的。

在MXML中設定事件屬性值的方式叫做事件監聽器內建。這種方式適合應用在簡單的事件處理上。它實際上已經創建了一個默認的事件監聽器方法(即省略了addEventListener()方法),並把ActionScript腳本的內容寫入方法,但這種方法的最大不足就是無法操作一個以上的事件監聽器。

而使用addEventListener方法註冊事件監聽器的方式,我們可以控制事件響應的捕獲方式和優先級;當我們已經添加的事件監聽器在程序的運行過程中需要取消掉的時候,我們可以通過removeEventListener方法來實現。而這些功能在事件監聽器內建方式中不會被支持,理由也很明瞭:內建的事件監聽器都是匿名的,我們無法引用到匿名監聽器的監聽實體方法。

 

5、EventDispatcher類

 

事件當然要發生在事件目標上,比如點擊按鈕時,事件目標就是按鈕。在Flex應用中,任何顯示列表上的對象都可能成爲事件目標,換句話說,都能夠觸發事件。而這種特性全拜flash.events.EventDispatcher類所賜。

EventDispatcher類實現IEventDispatcher接口,並且是DisplayObject類的基類(DisplayObject 類是可放在顯示列表中的所有對象類的基類)。EventDispatcher類允許顯示列表上的任何對象都是一個事件目標,而同時,又使得這些對象能夠偵聽事件。

對於EventDispatcher類來說,“dispatcher(調度)”不是一個好名字,因爲EventDispatcher類不僅僅能“調度”事件。EventDispatcher實現了複雜的DOM事件模型,提供了關鍵的事件方法,通常會使用到的方法包括:

・      addEventListener方法:爲EventDispatcher對象註冊事件偵聽器;

・      dispatchEvent方法:觸發事件,也可以稱爲“調度事件”;

・      hasEventListener方法:檢查對象是否爲特定事件註冊了事件偵聽器;

・      removeEventListener:從EventDispatcher對象中刪除事件偵聽器。

(更多內容參考:http://hi.baidu.com/xoxoxo/blog/item/bea6771ebc6845e41bd57683.html )

 

“只有事件發送者才能偵聽事件”,這句話的意思是dispatchEvent對象與addEventListener對象都必須是同一個實例,所發送的事件類型可以是系統自定義的事件也可以是任一類的靜態常量。 

       在自定義事件派發與偵聽過程中需要注意事件的流程,我們先要做的是建立偵聽器(addEventListener),再發送事件,程序在執行dispatchEvent之後立馬通知已註冊事件偵聽的所有對象,如果addEventListener語句在dispatchEvent之後,那麼註冊該偵聽器的對象將無法接到通知。這一點在接收和發送數據時容易出問題,有時候很難弄明白dispatchEvent語句究竟是在什麼時候執行的。

 

 

Flex addEventListener增加事件偵聽函數時傳遞多個參數 

原文在這裏:http://blog.csdn.net/lujinan858/archive/2009/06/02/4236610.aspx

但是我不是太理解,但其中有個較容易理解的方式,摘錄如下:

var sayHello:String = "歡迎光臨www.FlashJ.cn -Flash,Ria技術博客";
btn1.addEventListener(MouseEvent.CLICK,function (e:MouseEvent){clickHandlerWithArg(e,sayHello)});
function clickHandlerWithArg(e:MouseEvent,arg:String):void
{
var out:String= e.target + "發出事件(有參數) :" + arg;
trace(out);
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章