套件flash.events
類別public class EventDispatcher
繼承EventDispatcher Inheritance Object
實作 IEventDispatcher
子類別 Animator, Camera, ContextMenu, ContextMenuItem, DataProvider, DisplayObject, FileReference, FileReferenceList, IME, LoaderInfo, LocalConnection, Locale, Microphone, NetConnection, NetStream, PrintJob, RadioButtonGroup, SharedObject, Socket, Sound, SoundChannel, StyleSheet, Timer, Transition, TransitionManager, Tween, URLLoader, URLStream, XMLSocket

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

EventDispatcher 類別會實作 IEventDispatcher 介面,並且它是 DisplayObject 類別的基底類別。 EventDispatcher 類別允許顯示清單上的任何物件可以成為事件目標、可以使用 IEventDispatcher 介面的方法。

事件目標是 Flash ® Player 事件模型中很重要的一部分, 適合作為焦點位置,說明事件在顯示清單階層中的流程。 當發生如按下滑鼠或按下按鍵等事件時,Flash Player 會從顯示清單的根傳送事件物件到事件流程。 接著,事件物件會穿遍顯示清單,直到到達事件目標為止,這時它會經由顯示清單開始返回。 事件目標的這趟來回旅程,在概念上可分為三個階段: 捕捉階段包含從根到事件目標節點之前最後一個節點的旅程;目標階段只包含事件目標節點;而反昇階段則包含在返回顯示清單的根途中所遇到的任何後續節點。

一般來說,使用者定義的類別要取得事件傳送功能的最簡便方式,就是擴充 EventDispatcher。 如果無法擴充 (也就是說,如果此類別已經擴充其它類別),您可以改為實作 IEventDispatcher 介面、建立 EventDispatcher 成員,然後撰寫簡單的攔截程序將呼叫遞送到彙總的 EventDispatcher。

檢視範例



公用 屬性
 屬性定義自
 Inheritedconstructor : Object
類別物件的參照或是特定物件實體的建構函數。
Object
 Inheritedprototype : Object
[static] 類別或函數物件之原型物件的參照。
Object
公用 方法
 方法定義自
  
彙總 EventDispatcher 類別的實體。
EventDispatcher
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式¡以便讓偵聽程式收到事件的通知。
EventDispatcher
  
會將事件傳送到事件流程。
EventDispatcher
  
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。
EventDispatcher
 Inherited
指出物件是否有已定義的指定屬性。
Object
 Inherited
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。
Object
 Inherited
指出指定的屬性是否存在,以及是否可列舉。
Object
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
會從 EventDispatcher 物件移除偵聽程式。
EventDispatcher
 Inherited
為迴圈作業設定動態屬性的可用性。
Object
 Inherited
會傳回指定之物件的字串形式。
Object
 Inherited
會傳回指定之物件的基本值。
Object
  
檢查此 EventDispatcher 物件是否已註冊為事件偵聽程式,或者此物件的任何祖先已註冊為特定的事件類型。
EventDispatcher
事件
 事件 摘要 定義自
   當 Flash Player 取得作業系統焦點並成為作用中狀態時傳送。EventDispatcher
   當 Flash Player 失去作業系統焦點並成為停用狀態時傳送。EventDispatcher
建構函式詳細資訊
EventDispatcher()建構函式
public function EventDispatcher(target:IEventDispatcher = null)

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

彙總 EventDispatcher 類別的實體。

EventDispatcher 類別通常會被當成基底類別來使用,也就是說,大部分的開發人員並不需要用到這個建構函數。 不過,進階的開發人員在實作 IEventDispatcher 介面時會需要用到這個建構函式。 如果您無法擴充 EventDispatcher 類別,而必須改為實作 IEventDispatcher 介面,請使用這個建構函式來彙總 EventDispatcher 類別的實體。

參數
target:IEventDispatcher (default = null) — 傳送至 EventDispatcher 物件的事件目標物件。 當您使用實作 EventDispatcher 的類別來彙總 IEventDispatcher 實體時,就會用到這個參數;這個必要的參數可讓包含物件成為事件目標。 如果情況單純,只是某個類別擴充了 EventDispatcher,請勿使用此參數。
方法詳細資訊
addEventListener()方法
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會在 EventDispatcher 物件註冊事件偵聽程式¡以便讓偵聽程式收到事件的通知。 您可以在顯示清單上的所有節點,為特定類型的事件、階段與優先順序註冊事件偵聽程式。

當您成功註冊事件偵聽程式後,就不可以透過對 addEventListener() 的額外呼叫來變更其優先順序。 若要變更偵聽程式的優先順序,您必須先呼叫 removeListener()。 然後,您就可以使用新的優先順序等級來重新註冊偵聽程式。

請記住,一旦您註冊了偵聽程式,對 addEventListener() 進行後續呼叫,若使用不同的 typeuseCapture 值,將會導致建立個別的偵聽程式註冊程序。 例如,如果您先將 useCapture 設為 true 來註冊偵聽程式,則只會在捕捉階段進行偵聽。 如果您使用相同的偵聽程式物件,再次呼叫 addEventListener() (但將 useCapture 設為 false) 會得到兩個不同的偵聽程式: 一個會在捕捉階段進行偵聽,另一個則會在目標與反昇階段進行偵聽。

您無法單獨針對目標階段或反昇階段註冊事件偵聽程式。 由於反昇階段只適用於目標節點的祖先,因此這兩種階段必須一起進行註冊。

如果您不再需要事件偵聽程式,可以呼叫 removeEventListener() 來移除它,否則可能產生記憶體問題。 含有已註冊之事件偵聽程式的物件不會自動從記憶體中移除,因為垃圾回收器不會將仍保有參照的物件移除。

複製 EventDispatcher 實體並不會將附加在該實體上的事件偵聽程式一併複製 (如果新建立的節點需要事件偵聽程式,則您必須在建立節點後再附加偵聽程式)。 然而,如果您移動了 EventDispatcher 實體,則附加的事件偵聽程式也會跟著移動。

若於此節點正在處理事件的同時將事件偵聽程式註冊到某個節點上,則事件偵聽程式不會在目前階段觸發,但會在事件流程的後續階段 (例如反昇階段) 中觸發。

如果您在節點正在處理事件的同時將事件偵聽程式從節點中移除,則事件偵聽程式還是會被目前的動作觸發。 一旦移除了事件偵聽程式,就無法再叫用它 (除非您為了日後的處理而再次註冊它)。

參數

type:String — 事件類型。
 
listener:Function — 處理事件的偵聽程式函數。 此函數必須接受 Event 物件並當作唯一的參數,而且必須傳回空值,如下列範例所示:

function(evt:Event):void

函數可以具有任何名稱。

 
useCapture:Boolean (default = false) — 判斷偵聽程式是否可在捕捉階段或目標與反昇階段運作。 如果 useCapture 設為 true,則偵聽程式只會在捕捉階段 (而不是在目標或反昇階段) 處理事件。 如果 useCapturefalse,則偵聽程式只會在目標或反昇階段處理事件。 若要在全部三個階段中偵聽事件,請呼叫 addEventListener 兩次,先將 useCapture 設為 true 後進行第一次呼叫,接著將 useCapture 設為 false 再進行第二次呼叫。
 
priority:int (default = 0) — 事件偵聽程式的優先順序等級。 優先順序是由一個具有正負號的 32 位元整數所指定。 數字越大,代表優先順序越高。 所有優先順序為 n 的偵聽程式都會比優先順序為 n -1 的偵聽程式優先處理。 如果有兩個以上的偵聽程式共用同一個優先順序,則會依據加入的先後次序來處理。 預設的優先順序為 0。
 
useWeakReference:Boolean (default = false) — 判斷偵聽程式的參照為強或弱。 強參照 (預設) 會避免偵聽程式被垃圾回收器從記憶體中移除, 弱參照則無法避免這個情況發生。

類別層級的成員函數不受記憶體回收限制,因此您可以將類別層級成員函數的 useWeakReference 設定為 true,而且不會受到記憶體回收的限制。 如果您將屬於巢狀內部函數之偵聽程式的 useWeakReference 設定為 true,該函數將會進行記憶體回收,而不再具備永續性。 如果您建立內部函數的參考 (將它儲存在其它變數中),函數就不會進行記憶體回收,並保有永續性。


擲回值
ArgumentError — 指定的 listener 不是函數。

請參閱

dispatchEvent()方法 
public function dispatchEvent(event:Event):Boolean

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會將事件傳送到事件流程。 事件目標就是呼叫 dispatchEvent() 方法時所需的 EventDispatcher 物件。

參數

event:Event — 傳送至事件流程中的 Event 物件。 如果重新傳送事件,會自動建立事件副本。 一旦傳送了事件,就無法變更其 target 屬性,因此您必須建立事件的新副本,重新傳送才能成功。

傳回值
Boolean — 如果成功傳送事件,則為 true 值。 false 值代表失敗,或是事件已經呼叫 preventDefault()

擲回值
Error — 已達到事件傳送遞迴限制。
hasEventListener()方法 
public function hasEventListener(type:String):Boolean

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 這可讓您判斷 EventDispatcher 物件是否已經改變事件流程階層中事件類型的處理方式。 若要判斷特定事件類型是否已經實際觸發事件偵聽程式,請使用 willTrigger()

hasEventListener()willTrigger() 之間的差異在於 hasEventListener() 只檢查所屬的物件,而 willTrigger() 則會檢查整個事件流程中 type 參數所指定的事件。

從 LoaderInfo 物件呼叫 hasEventListener() 時,只會考量呼叫者可以存取的偵聽程式。

參數

type:String — 事件類型。

傳回值
Boolean — 如果註冊了特定類型的偵聽程式,則值為 true 值,否則為 false

請參閱

removeEventListener()方法 
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會從 EventDispatcher 物件移除偵聽程式。 如果沒有相符的偵聽程式以 EventDispatcher 物件來註冊,則呼叫此方法不會產生任何作用。

參數

type:String — 事件類型。
 
listener:Function — 要移除的偵聽程式物件。
 
useCapture:Boolean (default = false) — 指定偵聽程式是否針對捕捉階段或目標與反昇階段而註冊。 如果偵聽程式同時針對捕捉階段和目標與反昇階段而註冊,則必須移除對 removeEventListener() 的兩次呼叫 (一次呼叫的 useCapture() 是設為 true,另一次呼叫的 useCapture() 則是設定為 false),才能移除這兩個階段。

請參閱

willTrigger()方法 
public function willTrigger(type:String):Boolean

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

檢查此 EventDispatcher 物件是否已註冊為事件偵聽程式,或者此物件的任何祖先已註冊為特定的事件類型。 當特定類型的事件傳送至此 EventDispatcher 物件或其任何後代時,如果事件偵聽程式在事件流程的任何階段觸發,此方法就會傳回 true

hasEventListener()willTrigger() 方法之間的差異在於 hasEventListener() 只檢查所屬的物件,而 willTrigger() 則會檢查整個事件流程中 type 參數所指定的事件。

從 LoaderInfo 物件呼叫 willTrigger() 時,只會考量呼叫者可以存取的偵聽程式。

參數

type:String — 事件類型。

傳回值
Boolean — 如果即將觸發特定類型的偵聽程式,則為 true 值,否則為 false
事件詳細資訊
activate 事件
事件物件類型: flash.events.Event
Event.type property = flash.events.Event.ACTIVATE

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

當 Flash Player 取得作業系統焦點並成為作用中狀態時傳送。

定義 activate 事件物件的 type 屬性值。

注意:這個事件不會經歷「捕捉階段」,而且不管目標是否在顯示清單上,都會直接傳送至目標。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target具有註冊為 ACTIVATE 事件之偵聽程式的任何 DisplayObject 實體。
deactivate 事件  
事件物件類型: flash.events.Event
Event.type property = flash.events.Event.DEACTIVATE

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

當 Flash Player 失去作業系統焦點並成為停用狀態時傳送。

定義 deactivate 事件物件的 type 屬性值。

注意:這個事件不會經歷「捕捉階段」,而且不管目標是否在顯示清單上,都會直接傳送至目標。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target具有註冊為 DEACTIVATE 事件之偵聽程式的任何 DisplayObject 實體。
範例 如何使用範例
EventDispatcherExample.as

下列範例使用了 EventDispatcherExample 類別和 CustomDispatcher 類別,以及 EventDispatcher 的子類別,說明自訂事件的建立及傳送方式。 這個範例會執行下列工作:
  1. EventDispatcherExample 的建構函式會建立一個區域變數 dispatcher,並將其指定給新的 CustomDispatcher 實體。
  2. CustomDispatcher 內部會設定一個字串,因此事件的名稱會為 action,並且會宣告 doAction() 方法。 在呼叫時,此方法會建立 action 事件並使用 EventDispatcher.dispatchEvent() 傳送該事件。
  3. dispatcher 屬性用來新增 action 事件偵聽程式及相關的訂閱者方法 actionHandler(),該方法會簡單地列印與傳送事件時有關的資訊。
  4. 叫用 doAction() 方法來傳送 action 事件。
package {
    import flash.display.Sprite;
    import flash.events.Event;

    public class EventDispatcherExample extends Sprite {

        public function EventDispatcherExample() {
            var dispatcher:CustomDispatcher = new CustomDispatcher();
            dispatcher.addEventListener(CustomDispatcher.ACTION, actionHandler);
            dispatcher.doAction();
        }

        private function actionHandler(event:Event):void {
            trace("actionHandler: " + event);
        }
    }
}

import flash.events.EventDispatcher;
import flash.events.Event;

class CustomDispatcher extends EventDispatcher {
    public static var ACTION:String = "action";

    public function doAction():void {
        dispatchEvent(new Event(CustomDispatcher.ACTION));
    }
}




 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/ActionScriptLangRefV3/flash/events/EventDispatcher.html