ポップアップウインドウを作りたいときとか。
PopupWindow.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> <mx:Script> <![CDATA[ private var buttonFlags:uint = 0x4; private var type:uint; public static function popup(flags:uint = 0x4 /* Alert.OK */, type: uint = 0x0016 /* ALERT */ , parent:Sprite = null, cb:Function = null):void { var win:PopupWindow = new PopupWindow(); trace("------------------------------------"); win.type = type; win.buttonFlags = flags; PopUpManager.addPopUp(win, parent, false); PopUpManager.centerPopUp(win); } /////////////////////////////////////////////////////////////////////////// private function init():void { trace("++++++++++++++++++++++++++++++++++"); } ]]> </mx:Script> </mx:Panel>
とかして、コールしたいボタンから
PopupWindow.popup(ALERT.OK);
みたいにするんだけど、てっきり
trace("++++++++++++++++++++++++++++++++++");
trace("------------------------------------");
の順で出るんだろうと思ってたら、逆だった。
えー、PopupWindowがnewされた時点でcreationCompleteイベントが走るんじゃないんだ。
マニュアルには
コンポーネントの構築、プロパティ処理、測定、レイアウト、および描画が完了したときに送出されます。
って書いてある。
あー、newされた時点では描画は完成されてない。mxmlのDOMとして認識されてない。
init()が走るのは、PopUpManager.addPopUp(win, parent, false);した時点だ。
だから、newしたあとに、プロパティに値を突っ込んでやって、creationCompleteでその値でゴニョゴニョできるわけ。
これは確かにそれが使いやすい。