flex イベントリスナーとその削除
2011/08/18
addEventListener()とかを使ったら無限ループっぽくなった。
removeEventListener()を使う。
※イベントリスナーを取り除く。
※イベントリスナーを取り除く。
とりあえず解決はできたけど…わからないことだらけ。
イベントリスナー
そもそも「イベントリスナーって何よ?」って感じ。
イベントリスナーとはイベントが発生した場合に呼ばれるメソッドを持つクラス。
こういう感じの説明らしいんだけど今ひとつイメージできない。
イメージできないので自分の言葉に置換えしたのが下記。
イベントリスナーとは「イベントが発生するか監視。さらに発生後、関数(メソッド)を実行」ってことをやってくれる関数(クラス)。
イベントリスナーを取り除く
「なぜイベントリスナーを取り除く必要があるのか?」ってことなんだよね。
細かいことはイメージしきれない。
イベント発生ごとにメソッド(関数)実行したいときは、イベントリスナーは取り除かない。
イベント初発生時のみにメソッド(関数)実行したいときは、イベントリスナーを取り除く。
イベント初発生時のみにメソッド(関数)実行したいときは、イベントリスナーを取り除く。
removeEventListener
「イベントリスナーを取り除く」ってのは「removeEventListener」ってのを使う。
[対象].removeEventListener([イベント], [関数];
参考
調べているときに見つけたヤツ。今の私には理解できない。
URLもどっかいったので…。
たしか…「関数の呼出し元のイベントリスナーが複数あり、呼出し元のイベントリスナーのみ削除」ってことをしたいとか。
- //イベントつけてるところ
- xxx.addEventListener(FaultEvent.FAULT, faultHandler);
- //共通のハンドラ
- private function faultHandler(e:FaultEvent):void
- {
- IEventDispatcher(e.currentTarget).removeEventListener(FaultEvent.FAULT, faultHandler);
- }
- というような感じです。
- e.currentTargetにはイベントのソースが入りますので、そのソールからremoveするとOKです。