データバインディング

これまで決めたようにViewはMXMLで記述する。MXMLでデータバインドを使うのは、たとえば DataGrid の dataProvider に(別のクラスの)変数を指定して、その変数の値が変わった時に自動的にDataGrid にも反映させるような時だ。
そうするには dataProvider に{}に入れた変数を指定する(を使う方法もある)。この場合、以下のようなソースになる。








この gridData に [Bindable] をつけてないと「データバインディングでは"gridData"への代入を検出できません。」という警告が出る。当然そのまま実行しても gridData の値とは連動しない。

よってModel側のgridDataは以下のように宣言されてないといけない。

public class Model {
[Bindable]
var gridData:Object
・・・
}


ちなみに、コンパイラで作られたソースを見ると、このView MXMLの初期化時にMyModelのインスタンスが一時的にnewされている。MyModelのインスタンスは、Controlから代入されるので、View(=このDataGrid)でnewする必要はない。PACの利点である(切り捨てたが)、ViewがModelの初期化に縛られないことも失う実装になる(繰り返すと、想定してるアプリは大袈裟でないのでこの利点は全く関係ない)。


(上のことを回避する意味でも)以下のようにASを使うこともできるが、dataProviderのとこで「データバインディングでは"model"への代入を検出できません。」と警告が出る。
なぜ前のコードがよくて下のがダメなのかは分からないが、MXMLではなるべくタグを使え、と覚えておく。