FlexのちょっとしたTipsと講座(2) - Bindable

講座やTipsというほどではないけど、ざっくばらんに(というかまとまりなく)書いていきます。今回はBindableメタタグについて。嵌ってしまったので備忘録も予て。

Bindableを使ってファイル名をコンポーネントに渡したい、なんてときにはBindableを使うと奇麗に実装できるはずが、どうしてもセットした値をクラス内で取得できずに悶々としていた。
結論から言うと、コンストラクタ内ではまだ値はセットされていないので、commitProperties() を使うのが正解

TestFlex.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:my="*"
layout="absolute"
creationComplete="init()">
<mx:Script>
<![CDATA[

[Bindable]
var file_path:String = "/usr/local/bin/hogehoge";

// Bindalbeを使う他に、idをセットして id.text = ""; と指定してしまう方法もある。

] ]>
</mx:Script>
<my:Test text="{file_path}" /> <!-- ここでセットしている -->
</mx:Application>

Test.as

package {
import flash.display.Sprite;

import mx.controls.Label;
import mx.core.UIComponent;

public class Test extends UIComponent {
public var text:String = "";
protected var _label:Label = null;

public function Test() {
// this.text # => まだセットされていない。
this._label = new Label;
}

override protected function commitProperties():void {
var sprite:Sprite = new Sprite();

this._label.text = this.text;
this.addChild(this._label);

super.commitProperties();

this._label.setStyle("fontSize", 20);
this._label.setStyle("color", 0xFFFFFF);
this._label.validateDisplayList();
this._label.width = 400;
this._label.height = 200;

this.addChild(sprite);
sprite.addChild(this._label);
}
}
}