Event::targetには何が設定されているのか
dispatchEventメソッドでイベントを発生させたりしていたのですが、Eventクラスのtargetプロパティって、何が設定されているのかが気になりました。
Flex3のasdocのEvent::targetには以下のように書かれています。
イベントターゲットです。このプロパティにはターゲットノードが含まれます。例えば、ユーザーが [OK] をクリックした場合、ターゲットノードはそのボタンを含む表示リストノードです。
つまり、[OK]ボタンをクリックした場合、Event::targetには[OK]ボタンが設定されているということ?
まどろっこしいッ!
試しに以下のクラスに対して、Testクラスを実行してみます。
TestDispatcher.as
package { import flash.events.Event; import flash.events.EventDispatcher; public class TestDispatcher extends EventDispatcher { public function TestDispatcher() { super(); } public function runDispatch():void { dispatchEvent(new Event(Event.COMPLETE)); } } }
package { import flash.display.Sprite; import flash.events.Event; public class Test extends Sprite { private var _dispatcher:TestDispatcher; public function Test() { super(); _dispatcher = new TestDispatcher(); _dispatcher.addEventListener(Event.COMPLETE, onComplete); _dispatcher.runDispatch(); } private function onComplete(event:Event):void { if (event.target == _dispatcher) { trace("target == _dispatcher"); } else { trace("target != _dispatcher"); } } } }
出力は「target == _dispatcher」となり、dispatchEventが実行されたクラスがEvent::targetに設定されているようです。
Event::targetは読み取り専用プロパティということで、データの設定を手動で行えないのですが、
dispatchEventメソッド内でinternalだったり何かしらのnamespaceであるtargetのsetterでも呼んでいるんですかね?
IEventDispatcherを使用する場合は、実装するEventDispatcherのコンストラクタにthisを渡して使うみたいなので、
その場合送出されるEvent::targetにはこのthisが設定されるに違いない。
なるほど。
これで大っぴらにEventを使えそうです。