下記コードは、先日のエントリーで掲載したコードとほぼ同じ内容ですが、主な相違点は 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);
}
}
}