ひがやすを技術ブログ

電通国際情報サービスのプログラマ

getter, setter付きのプロパティのバインディング

Flexは、{オブジェクト.プロパティ}の表記で、簡単にバインディングが出来るのですが、getter, setter付きのプロパティは、そのままでは、バインディングできません。

クラスに直接定義されたプロパティの例


class Foo {
var aaa:String;
}

アクセッサつきのプロパティの例


class Foo {
private var __aaa:String;
function get aaa():String {
return __aaa;
}
function set aaa(s:String):Void {
__aaa = s;
}
}
このaaaプロパティをバインディングに対応させるためには、次のようにします。

  1. dispatchEvent:Functionの変数を定義する。
  2. コンストラクタでmx.events.EventDispatcher.initialize(this);を実行する。
  3. アノテーションで、aaaプロパティはChangeEventを発生させると宣言する。
  4. setterメソッドで、dispatchEvent()を呼び出す。

バインディングに対応したアクセッサつきのプロパティの例


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"});
}
}

マニュアルには、1と2が抜けてます。

MyApp.mxml


<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"
initialize="foo.aaa = '111'">