主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

イベントにリスナーがあるかどうかの判定

このイベントにリスナーが存在するか

関数event.hasListenerを使用して,特定のイベントにリスナーがあるかどうかを判定します。event.hasListenerはイベントソースオブジェクトの配列とイベント名を入力引数として受け入れます。この関数は,配列内の各オブジェクトの指定されたイベントに対するリスナーが存在するかどうかを示す論理値の配列を返します。

メモ

呼び出されたときに,event.hasListenerにはイベントのNotifyAccessがなければなりません。つまり,対象のイベントに対する通知を呼び出すことができるコンテキストでevent.hasListenerを呼び出します。

リスナーをテストする理由

イベントに対するリスナーがない場合,event.hasListenerを使用してイベントの通知が送信されないようにします。たとえば,カスタムイベントデータの作成によって多くのリソースが消費される場合や,イベントが繰り返しトリガーされる場合,以下の手順を実行する前にevent.hasListenerを使用してリスナーをテストします。

コーディングパターン

  • event.hasListenerを使用して,イベントデータの作成と通知の呼び出しに条件を付けます。オブジェクト配列一个に対して,イベントデータを作成し,イベントをトリガーする前にリスナーがあるかどうかを判定します。

    如果任何(event.hasListener (,NameOfEvent)) evt = MyCustomEventData(…);通知(,NameOfEvent(evt)结束
  • event.hasListenerによって返される値での論理インデックス付けを使用して,イベントを選択的にトリガーします。リスナーをもつ配列要素についてのみイベントの通知を送信します。

    印第安纳州= event.hasListeners (,NameOfEvent);通知((印第安纳州),NameOfEvent(evt)

異種混合配列のリスナー

入力オブジェクトの配列が異種混合の場合,配列のクラスは指定されたイベントを定義しなければなりません。配列のすべてのオブジェクトで定義されているイベントに対してのみリスナーをクエリできます。

たとえば,次の図で,クラス性能指标SpecificBSpecificCのオブジェクトで構成される異種混合配列のクラスはRootSuperclassです。したがって,event.hasListenerは,RootEventイベントに対するリスナーのみを検出できます。すべての配列要素に共通の唯一のイベントであるためです。

非常に“特定”なこれら3つのクラスを使用して異種混合配列を作成します。

het =[性能指标、SpecificB SpecificC];类(het)
ans RootSuperclass
事件(het)
类RootSuperclass RootEvent的事件

event.hasListenerは,配列の一部(すべてではない)のオブジェクトによって定義されたイベントに対するリスナーがあるかどうかを判定できません。

event.hasListener (het,“ClassAEvent”
错误使用事件。没有为类“RootSuperclass”定义hasListener事件“ClassAEvent”。

配列にインデックスを付けて,異種混合配列の個々のオブジェクトに特定のイベントに対して定義されたリスナーがあるかどうかを判定します。

event.hasListener (het (1),“ClassAEvent”

異種混合配列のクラスの判定に関する詳細については,異種混合クラス階層の設計を参照してください。

関連するトピック