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.
|