Pay for Hesitation: Flex的三種Binding方式

Pages

2008年3月22日 星期六

Flex的三種Binding方式

在我們編譯Flex的application後, 背後會自己產生一些Watcher來監控在程式中各個被binding的地方, 執行的時候, 當這些Watchers發現binding相關的地方被做了任何修改, Watcher會立即觸發change的events同步update執行與binding相關的工作. 在Flex中, 有三種binding的方式:

1. 利用大括弧 {}
2. MXML 的 tag
3. ActionScript 中的 mx.binding.utils.BindingUtils

1. 利用大括弧 {}
用metatag [Bindable]來bind屬性已經很熟悉了, 但如果想bind的是一般的actionscript的function呢? 通常必須伴隨[Bindable]一個屬性作為該function的參數.


當inString發生改變, 則立即觸發getNewText(), 但若把inString直接寫在getNewText()的參數, 那麼它只會在初始化的時候做一次而已, 無法達到binding的效果.

2. MXML 的 tag
的效果和{}是一樣的, 差別在於得指定source和destination兩個屬性. 也可以在source中用{}, 達到的效果是一樣的. 下面的三個例子的效果是一樣的.


3. ActionScript中的 mx.binding.utils.BindingUtils

a. 直接bind兩個文字輸入框的text屬性:
BindingUtils.bindProperty(textarea, "text", textinput, "text");
b. 透過bindSetter來bind一個變數和set函式
public function mySetterBinding(event:FlexEvent):void {
var watcherSetter:ChangeWatcher = BindingUtils.bindSetter(setMyString, textInput2, "text");
}
將testinput2的text屬性與setMyString()給bind起來,
當textinput2的text被修改時, 則會立即觸發setMyString函式.

沒有留言: