getter, setter付きのプロパティのバインディング
Flexは、{オブジェクト.プロパティ}の表記で、簡単にバインディングが出来るのですが、getter, setter付きのプロパティは、そのままでは、バインディングできません。
クラスに直接定義されたプロパティの例
class Foo {
var aaa:String;
}
アクセッサつきのプロパティの例
このaaaプロパティをバインディングに対応させるためには、次のようにします。
class Foo {
private var __aaa:String;
function get aaa():String {
return __aaa;
}
function set aaa(s:String):Void {
__aaa = s;
}
}
- dispatchEvent:Functionの変数を定義する。
- コンストラクタでmx.events.EventDispatcher.initialize(this);を実行する。
- アノテーションで、aaaプロパティはChangeEventを発生させると宣言する。
- setterメソッドで、dispatchEvent()を呼び出す。
バインディングに対応したアクセッサつきのプロパティの例
マニュアルには、1と2が抜けてます。
class Foo {var dispatchEvent:Function;
private var __aaa:String;
function Foo() {
mx.events.EventDispatcher.initialize(this);
}[ChangeEvent("aaaChanged")]
function get aaa():String {
return __aaa;
}
function set aaa(s:String):Void {
__aaa = s;
dispatchEvent({type:"aaaChanged"});
}
}
MyApp.mxml
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"
initialize="foo.aaa = '111'">