アーカイブ

MXML Coding Best Practice 概要(候補 2 )

下記コードは、先日のエントリーで掲載したコードとほぼ同じ内容ですが、主な相違点は IMXMLObject を使用していることです。

Application タグ内に、IMXMLObject インターフェイスを実装した AS クラスをタグ化して配置することにより、Application タグのインスタンスと、同インスタンスがタグ化した AS クラスを参照するための識別子が、AS クラスの initialized() メソッドに送出されます。

initialized() メソッドは、MXML アプリケーションから明示的に呼び出さずとも、MXML タグに指定されたすべてのコンポーネントプロパティが初期化された後、コンストラクタと同じように呼び出されます。(仮にコンストラクタを定義しても、ビルドエラーは発生しません)

MXML Application
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:base = "lib.*"
    xmlns:mx   = "http://www.adobe.com/2006/mxml">
    <base:ApplicationBase id="hogeName" />
    <mx:Button id="hogeButton" label="test" />
</mx:Application>
lib/ApplicationBase.as package lib
{
    import flash.events.MouseEvent;
    import mx.core.IMXMLObject;
    import mx.events.FlexEvent;
    /**
     * MXML Application コントロールクラス
     */
    public class ApplicationBase implements IMXMLObject
    {
        /**
         * MXML Application インスタンス変数
         */
        private var mApplication:MXML Application Name;
        /**
         * initialized
         * @param aDocment このクラスを作成した MXML オブジェクト
         * @param aId aDocment がこのクラスを参照するための識別子
         * 実装オブジェクトが作成され、MXML タグに指定されたすべてのコンポーネントプロパティが初期化された後に呼び出されます。
         */
        public function initialized(aDocment:Object, aId:String):void
        {
            mApplication = aDocment as MXML Application Name;
            mApplication.addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler, false, 0, true);
        }
        /**
         * clickHandler
         * @param event MouseEvent オブジェクト
         * テスト出力
         */
        private function clickHandler(event:MouseEvent):void
        {
            trace("hoge");
        }
        /**
         * creationCompleteHandler
         * @param event FlexEvent オブジェクト
         * 初期化
         */
        private function creationCompleteHandler(event:FlexEvent):void
        {
            mApplication.hogeButton.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
        }
    }
}

参考:IMXMLObject の実装について — Flex 2