サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

コンポーネントからイベントリスナーを削除したい

ID: FN0311004 Product: Flash

Platform: All
Version: MX 2004

1. ドキュメントに記載がない?
コンポーネントインスタンスにリスナーオブジェクトを登録するには、'UIEventDispatcher.addEventListener()'メソッドを使用します。しかし、登録したリスナーオブジェクトをコンポーネントインスタンスのリスナーから削除するメソッドが、ドキュメントに見当たりません。

オンラインヘルプの[Flashコンポーネントガイド]には、[コンポーネントイベントリスナーの使用]にリスナーの登録が説明されているものの、削除については記載がありません。[コンポーネント辞書]のUIEventDisptcherクラスにも、メソッドとしてはただひとつ'UIEventDispatcher.addEventListener()'があるのみです。

2. UIEventDispatcher.removeEventListener()メソッド
'UIEventDispatcher.addEventListener()'メソッドがあるなら、'UIEventDispatcher.removeEventListener()'もあってしかるべきでしょう。実際このメソッドは存在します。これらふたつのメソッドはセットと考えられますので、非ドキュメント(undocumented)のメソッドということではなく、ドキュメントバグだと思われます。

3. イベントリスナーの削除
つぎのサンプルは、clickイベントをブロードキャストするコンポーネント(たとえばButton)インスタンスに、イベントリスナーを登録したうえで、そのclickイベントのコールバック関数内でリスナーオブジェクトをイベントリスナーから削除します。したがって、この関数はインスタンスのクリック時に1度だけ呼出され、以降はクリックしても処理が行われません。

listenerObject = new Object();  // リスナーオブジェクトの作成
listenerObject.click = function(eventObject) {  // clickイベントのコールバック関数定義
  trace(eventObject.target); // コンポーネントインスタンスの確認用
  eventObject.target.removeEventListener("click", this);  // イベントリスナーからリスナーオブジェクトを削除
};
componentInstance.addEventListener("click", listenerObject);  // リスナーオブジェクトのイベントリスナーへの登録

なお、メソッドのシンタックス等につきましては、リファレンスの'UIEventDispatcher.removeEventListener()'をご参照ください。

_____

作成者: 野中文雄
作成日: 2003年11月26日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.