パッケージflash.events
インターフェイスpublic interface IEventDispatcher
実装者 AbstractService, EventDispatcher, OLAPCube

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

IEventDispatcher インターフェイスは、イベントリスナーを追加または削除するメソッドの定義、特定のタイプのイベントリスナーが登録されているかどうかのチェック、およびイベントの送出を行います。

イベントターゲットは、Flash® Player および Adobe AIR イベントモデルの重要な部分です。 イベントターゲットは、イベントが表示リスト階層をどのように流れるかに関して中心的な役割を果たします。マウスのクリックやキー押下などのイベントが発生すると、イベントオブジェクトが表示リストのルートからイベントフローに送出されます。 イベントオブジェクトはイベントターゲットとの間を往復します。これは、概念として次の 3 つの段階に分けられます。キャプチャ段階は、ルートからイベントターゲットのノードの直前のノードまでが対象となります。ターゲット段階は、イベントのターゲットノードのみが対象となります。バブリング段階は、表示リストのルートまでの戻りにあるすべての後続ノードが対象となります。

一般に、ユーザー定義クラスがイベント送出機能を得る最も簡単な方法は、EventDispatcher を拡張することです。クラスが既に別のクラスを拡張していて拡張が不可能な場合、代わりに IEventDispatcher インターフェイスを実装し、EventDispatcher メンバーを作成して、集約された EventDispatcher に呼び出しをルーティングする単純なフックを記述できます。

例を表示



パブリックメソッド
 メソッド定義元
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。
IEventDispatcher
  
イベントをイベントフローに送出します。
IEventDispatcher
  
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
IEventDispatcher
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher オブジェクトからリスナーを削除します。
IEventDispatcher
  
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。
IEventDispatcher
メソッドの詳細
addEventListener()メソッド
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。イベントリスナーは、特定のタイプのイベント、段階、および優先度に関する表示リスト内のすべてのノードに登録できます。

イベントリスナーが正常に登録された後に、addEventListener() () をさらに呼び出して優先度を変更することはできません。リスナーの優先度を変更するには、最初に removeEventListener() () を呼び出す必要があります。その後、同じリスナーを新しい優先度レベルで再度登録できます。

リスナーが登録された後に、addEventListener()type または useCapture に別の値を設定)を再度呼び出すと、別のリスナー登録が作成されることに注意してください。たとえば、最初にリスナーを登録するときに useCapturetrue に設定すると、そのリスナーはキャプチャ段階のみでリスニングします。同じリスナーオブジェクトを使用して再度 addEventListener() を呼び出すと(このとき、useCapturefalse に設定)、異なる 2 つのリスナーが登録されます。1 つはキャプチャ段階でリスニングするリスナーで、もう 1 つはターゲット段階とバブリング段階でリスニングするリスナーです。

ターゲット段階またはバブリング段階のみを対象とするイベントリスナーを登録することはできません。登録時にこれらの段階が組み合わされるのは、バブリングはターゲットノードの祖先にしか適用されないためです。

イベントリスナーが不要になった場合は、EventDispatcher.removeEventListener() を呼び出して、イベントリスナーを削除します。削除しない場合、メモリの問題が発生する可能性があります。ガベージコレクターは参照を有するオブジェクトを削除しないため、登録されているイベントリスナーに関係したオブジェクトはメモリから自動的に除去されません。

EventDispatcher インスタンスをコピーしても、それに関連付けられているイベントリスナーはコピーされません。新しく作成したノードにイベントリスナーが必要な場合は、ノードを作成した後に、リスナーを関連付ける必要があります。ただし、EventDispatcher インスタンスを移動した場合は、関連付けられているイベントリスナーも一緒に移動されます。

イベントがノードで処理されるときに、イベントリスナーがそのノードに登録中であれば、イベントリスナーは現在の段階ではトリガされません。ただし、バブリング段階など、イベントフローの後の段階でトリガすることができます。

イベントがノードで処理されているときにイベントリスナーがノードから削除された場合でも、イベントは現在のアクションによってトリガされます。削除された後は、その後の処理で再び登録されない限り、イベントリスナーは二度と呼び出されません。

パラメータ

type:String — イベントのタイプです。
 
listener:Function — イベントを処理するリスナー関数です。次の例のように、この関数は、Event オブジェクトを唯一のパラメータとして受け取り、何も返さないようにします。

function(evt:Event):void

関数の名前は任意に付けられます。
 
useCapture:Boolean (default = false) — リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。useCapturetrue に設定すると、リスナーはキャプチャ段階のみでイベントを処理し、ターゲット段階またはバブリング段階では処理しません。useCapturefalse に設定すると、リスナーはターゲット段階またはバブリング段階のみでイベントを処理します。3 つの段階すべてでイベントを受け取るには、addEventListener() を 2 回呼び出します。useCapturetrue に設定して呼び出し、useCapturefalse に設定してもう一度呼び出します。
 
priority:int (default = 0) — イベントリスナーの優先度レベルです。優先度は、32 ビット整数で指定します。数値が大きくなるほど優先度が高くなります。優先度が n のすべてのリスナーは、優先度が n-1 のリスナーよりも前に処理されます。 複数のリスナーに対して同じ優先度が設定されている場合、それらは追加された順番に処理されます。 デフォルトの優先度は 0 です。
 
useWeakReference:Boolean (default = false) — リスナーへの参照が強参照と弱参照のいずれであるかを判断します。デフォルトである強参照の場合は、リスナーのガベージコレクションが回避されます。弱参照では回避されません。

クラスレベルメンバー関数はガベージコレクションの対象外であるため、クラスレベルメンバー関数の useWeakReference は、ガベージコレクションの制限とは無関係に true に設定できます。inner 関数がネストしているリスナーの useWeakReferencetrue に設定すると、この関数はガベージコレクションの対象となり、永続化されなくなります。inner 関数に対する参照を作成 (別の変数に保存) した場合、その関数はガベージコレクションされず、永続化された状態のままになります。

dispatchEvent()メソッド 
public function dispatchEvent(event:Event):Boolean

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

イベントをイベントフローに送出します。イベントターゲットは EventDispatcher オブジェクトです。これに対して dispatchEvent() が呼び出されます。

パラメータ

event:Event — イベントフローに送出されるイベントオブジェクトです。

戻り値
Booleantrue を返します(イベントで preventDefault() が呼び出されない限り)。呼び出された場合は false を返します。
hasEventListener()メソッド 
public function hasEventListener(type:String):Boolean

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。これにより、EventDispatcher オブジェクトがイベントタイプの処理をイベントフロー階層のどこで変更したかを判断できます。特定のイベントタイプが実際にイベントリスナーをトリガするかどうかを判別するには、IEventDispatcher.willTrigger() () を使用します。

hasEventListener()willTrigger() の違いは、hasEventListener() では自身が属するオブジェクトのみが検証され、willTrigger() では type パラメータで指定されたイベントのイベントフロー全体が検証されることです。

パラメータ

type:String — イベントのタイプです。

戻り値
Boolean — 指定したタイプのリスナーが登録されている場合は true、それ以外の場合は false です。

関連項目

removeEventListener()メソッド 
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

EventDispatcher オブジェクトからリスナーを削除します。対応するリスナーが EventDispatcher オブジェクトに登録されていない場合は、このメソッドを呼び出しても効果はありません。

パラメータ

type:String — イベントのタイプです。
 
listener:Function — 削除するリスナーオブジェクトです。
 
useCapture:Boolean (default = false) — リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階に対して登録されたかどうかを示します。リスナーがキャプチャ段階だけでなくターゲット段階とバブリング段階にも登録されている場合は、removeEventListener() を 2 回呼び出して両方のリスナーを削除する必要があります。1 回は useCapturetrue に設定し、もう 1 回は useCapturefalse に設定する必要があります。

willTrigger()メソッド 
public function willTrigger(type:String):Boolean

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。指定されたタイプのイベントがこの EventDispatcher オブジェクトまたはその子孫に送出されたときに、イベントリスナーがイベントフローの任意の段階でトリガされる場合、このメソッドは true を返します。

hasEventListener()willTrigger() の違いは、hasEventListener() では自身が属するオブジェクトのみが検証され、willTrigger() では type パラメータで指定されたイベントのイベントフロー全体が検証されることです。

パラメータ

type:String — イベントのタイプです。

戻り値
Boolean — 指定したタイプのリスナーがトリガされた場合は true、それ以外の場合は false です。
例の使用法
IEventDispatcherExample.as

次の例では、IEventDispatcherExample クラスおよび DecoratedDispatcher サンプルクラスを使用して、IEventDispatcher クラスの実装方法と使用方法を示します。これを行うには、DecoratedDispatcher の各メソッドを EventDispatcher と同じ方法で実装します。IEventDispatcherExample のコンストラクタで、DecoratedDispatcher クラスの新しいインスタンスを decorDispatcher という名前で作成します。また、この decorDispatcher 変数を使用して、addEventListener() をカスタムイベント doSomething で呼び出します。このカスタムイベントは didSomething() で処理され、trace() を使用してテキストの 1 行を印刷します。
 
package {
        import flash.events.Event;
        import flash.display.Sprite;
       
        public class IEventDispatcherExample extends Sprite {
                public function IEventDispatcherExample() {
                        var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher();
                        decorDispatcher.addEventListener("doSomething", didSomething);
                        decorDispatcher.dispatchEvent(new Event("doSomething"));
                }
               
                public function didSomething(evt:Event):void {
                        trace(">> didSomething");
                }
        }
}

import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
import flash.events.Event;
               
class DecoratedDispatcher implements IEventDispatcher {       
    private var dispatcher:EventDispatcher;
               
    public function DecoratedDispatcher() {
        dispatcher = new EventDispatcher(this);
    }
           
    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
        dispatcher.addEventListener(type, listener, useCapture, priority);
    }
           
    public function dispatchEvent(evt:Event):Boolean{
        return dispatcher.dispatchEvent(evt);
    }
    
    public function hasEventListener(type:String):Boolean{
        return dispatcher.hasEventListener(type);
    }
    
    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
        dispatcher.removeEventListener(type, listener, useCapture);
    }
                   
    public function willTrigger(type:String):Boolean {
        return dispatcher.willTrigger(type);
    }
}




 

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/events/IEventDispatcher.html