その7でYUI Frameworkを試した結果、functionを追加するだけでイベント処理が書けるようになったのは便利なのですが、どんなイベントがいつ発生しているのかわかりません。
そこで今回は全てのイベントをtrace()に出力して、いわゆる見える化してみます。
logic/HelloViewLogic.as
package logic { import flash.events.*; import flash.utils.*; import mx.controls.*; import mx.core.*; import view.*; import dto.*; public class HelloViewLogic { [View] public var helloView:HelloView; [Model(bindView="helloView")] public var helloViewDto:HelloViewDto; /** * コンストラクタ */ public function HelloViewLogic() { UIComponent.mx_internal::["dispatchEventHook"] = dispatchEventHook; } /** * Hookイベント */ private function dispatchEventHook(event:Event, component:UIComponent):void { trace("[EventHook]" + getShortClassName(component) + "->" + getShortClassName(event) + "->" + event.type); } /** * クラス名を取得 */ private function getShortClassName(object:Object):String { const sep:String = "::"; var cls:String = getQualifiedClassName(object); var pos:Number = cls.lastIndexOf(sep); return pos == -1 ? cls : cls.substring(pos+sep.length); } /** * ボタン押下 */ public function clickMeClickHandler(event:MouseEvent):void { if (helloViewDto.message == "") { return; } Alert.show(helloViewDto.message); } } }
これで全てのイベントがdispatchEventHook()へ通知されるようになります。
このサンプルでは以下のようなメッセージ形式で出力されます。
[EventHook]HelloYuiWorld->PropertyChangeEvent->propertyChange [EventHook]HelloYuiWorld->Event->widthChanged [EventHook]HelloYuiWorld->Event->heightChanged [EventHook]HelloYuiWorld->ResizeEvent->resize
しかし、けっこうな量のメッセージが出力されます。