tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

イベントの通知

Flexではボタン操作などの情報をイベントという形で伝達しています。
それぞれのイベントは、イベントリスナを登録している場合のみ通知を受け取ることができます。
そのため、イベント通知を受け取る場合には、そのイベント名に対してイベントリスナを登録する必要があります。


発生したイベントは、親から順にイベント発生元コンポーネントまで伝搬され、その後、再び親に向かって再度伝搬されていきます。段階に応じて親から子へ伝搬される段階をキャプチャ段階、発生元の処理時にはターゲット段階、最後に親に伝搬される段階をバブリング段階、というように名前も区別されています。


例をあげてみると、

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			
			private function buttonClick(event:Event):void {
				Alert.show(event.target.id + " was clicked");
			}
		]]>
	</mx:Script>
	
	<mx:Panel id="panel">
		<mx:Button click="buttonClick(event)" label="Click Me" id="button"/>
	</mx:Panel>
</mx:Application>

上記のようなコードの場合、"Click Me"ボタンを押すと以下のような順番でイベントが流れていきます。

1. mx:Application
2. mx:Panel
3. mx:Button
4. mx:Panel
5. mx:Application


このように、直接イベントが発生したコンポーネント以外は、発生元の処理前・処理後の2つの段階でイベント通知を受け取るように指定することができます。この仕組みを上手く利用すると、イベントの前処理・後処理や、イベントの集中管理といった処理を行うことができるようになります。