flex イベントリスナーとその削除

2011/08/18

addEventListener()とかを使ったら無限ループっぽくなった。

removeEventListener()を使う。
※イベントリスナーを取り除く。

とりあえず解決はできたけど…わからないことだらけ。

イベントリスナー

そもそも「イベントリスナーって何よ?」って感じ。

イベントリスナーとはイベントが発生した場合に呼ばれるメソッドを持つクラス。

こういう感じの説明らしいんだけど今ひとつイメージできない。
イメージできないので自分の言葉に置換えしたのが下記。

イベントリスナーとは「イベントが発生するか監視。さらに発生後、関数(メソッド)を実行」ってことをやってくれる関数(クラス)。

イベントリスナーを取り除く

「なぜイベントリスナーを取り除く必要があるのか?」ってことなんだよね。
細かいことはイメージしきれない。

イベント発生ごとにメソッド(関数)実行したいときは、イベントリスナーは取り除かない。
イベント初発生時のみにメソッド(関数)実行したいときは、イベントリスナーを取り除く。

removeEventListenerの考え方のイメージ図

removeEventListener

「イベントリスナーを取り除く」ってのは「removeEventListener」ってのを使う。

[対象].removeEventListener([イベント], [関数];

参考

調べているときに見つけたヤツ。今の私には理解できない。
URLもどっかいったので…。

たしか…「関数の呼出し元のイベントリスナーが複数あり、呼出し元のイベントリスナーのみ削除」ってことをしたいとか。

  1. //イベントつけてるところ
  2. xxx.addEventListener(FaultEvent.FAULT, faultHandler);
  3.  
  4. //共通のハンドラ
  5. private function faultHandler(e:FaultEvent):void
  6. {
  7.   IEventDispatcher(e.currentTarget).removeEventListener(FaultEvent.FAULT, faultHandler);
  8. }
  9.  
  10. というような感じです。
  11. e.currentTargetにはイベントのソースが入りますので、そのソールからremoveするとOKです。

新着(ニュース関連以外)

2017-08-03
formのinputでmaxlengthを使うとFirefoxでバグってた。他のブラウザでも気づかずにバグってたかもしれない。
2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。