用靜態屬性作爲數據綁定源
可以將靜態屬性作爲數據綁定表達式的源,Flex 在應用啓動時執行一次數據綁定,然後在靜態屬性發生變化的時候再執行數據綁定。可以將靜態常量自動作爲數據綁定表達式的
源,Flex 只在應用啓動時執行一次數據綁定。因爲數據綁定只在應用啓東時發生一次,所以可以對靜態常量省略[Bindable]元數據標記。
使用函數作爲數據綁定源
可將函數作爲數據綁定表達式中的一部分。在數據綁定表達式中使用函數的兩種常見技術.
【1】將可綁定的屬性作爲函數的參數以觸發函數的執行。
【2】爲了響應綁定事件而出發函數的執行。
將對象用於數據綁定
綁定到對象
當使一個對象成爲數據綁定表達式的源時,數據綁定發生在這個對象被更新之時,或者這個對象的引用被更新之時,但不能發生在這個對象的單個(數據)域(feild)被更新之時。
爲了使對象的屬性可綁定,要創建新的類定義.
package myComponents
{
// binding/myComponents/BindableObject.as
// Make all class properties bindable.
[Bindable]
public class BindableObject extends Object {
public function BindableObject() {
super();
}
public var stringProp:String = "String property";
public var intProp:int = 52;
}
}
通過在類定義之前放置[Bindable]元數據標記,就可以使得類中所有public 變量、以及所有完全具備setter 及getter 的public 屬性成爲可綁定的屬性。
在綁定中使用數組
在使用數組進行工作時,比如Array 或者ArrayCollection 對象,可以把數組作爲數據綁定表達式的源或目的。
注意:當使用數組作爲綁定源時,應該使用ArrayCollection 類型的數組,因爲ArrayCollection 類在數組或數組元素髮生變化時能夠發出事件來觸發數據綁定。比如,對
ArrayCollection.addItem(), ArrayCollection.addItemAt(),ArrayCollection.removeItem(), 以及ArrayCollection.removeItemAt()方法的調用都會觸發數據綁定。
綁定到數組中的元素
可以使用數組中的單個元素作爲數據綁定源,如下例所示:
<?xml version="1.0"?>
<!-- binding/ArrayBinding.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var myAC:ArrayCollection = new ArrayCollection(["One", "Two", "Three", "Four"]);
[Bindable]
public var myAC2:ArrayCollection = new ArrayCollection(["Uno", "Dos", "Tres", "Quatro"]);
]]>
</mx:Script>
<!-- Data binding updated at application startupand when myAC modified. -->
<mx:Text id="text1" text="{myAC[0]}"/>
<!-- Data binding updated at application startup,when myAC modified, and when myAC[0] modified. -->
<mx:Text id="text2" text="{myAC.getItemAt(0)}"/>
<mx:Button id="button1" label="Change Element" click="myAC[0]='new One'"/>
<mx:Button id="button2" label="Change ArrayCollection" click="myAC=myAC2"/>
</mx:Application>
如果通過方括號語法[]來指定數組元素作爲數據綁定表達式的源,那麼數據綁定只在應用啓動時觸發,或者在數組或其引用被更新時觸發。當這個數組元素被更新的時候不會觸發數據
綁定。但數據綁定表達式中的myAC.getItemAt(0)則會在該數組元素變化時被觸發更新。因此,id爲 text2 的Text 控件在點擊button1 時會被更新,而id 爲text1 的Text 控件則不會被更
新。當使用數組中的元素作爲數據綁定表示的源時,應當在綁定表達式中使用ArrayCollection.getItemAt()方法。點擊button2 時將myAC2 拷貝給myAC,這會觸發對數組元素的所有
數據綁定而不論它們是如何實現的。
使用可綁定屬性鏈進行工作當指定一個屬性作爲數據綁定表達式的源時,Flex 不僅監控這個屬性的變化,也會監控這個由這個屬性作爲開始點的屬性鏈的變化。整個屬性鏈,包括源
屬性,被稱爲“可綁定的屬性鏈”。在下面的例子中,firstName.text 是一個可綁定的屬性鏈:
<mx:Text id="myText" text="{firstName.text}"/>
開發者可以使用很長的屬性鏈,如下例所示:
<mx:Text id="myText" text="{user.name.firstName.text}"/>
只有當text 屬性是可綁定的,數據綁定機制才能檢查text 屬性的變化。但是,如果在運行時,想要向屬性鏈中的部分屬性賦予新值,那麼屬性鏈中的每個屬性都必須是可綁定的,才
能使數據綁定機制起作用。否則,在運行時更改user,name 或者firstName 屬性會導致數據綁定機制無法檢查text 屬性的變化。在使用BindingUtils.bindProperty()或者
BindingUtils.bindSetter()方法時,可以將可綁定的屬性鏈作爲方法的參數,例如,bindProperty()方法有以下的聲明:
public static function bindProperty(site:Object, prop:String, host:Object, chain:Object, commitOnly:Boolean = false):ChangeWatcher
Host 和chain 屬性指定了數據綁定表達式的源。使用bindProperty()方法可以定義一個
數據綁定表達式,如下:
bindProperty(myText, 'text', user, ["name","firstName","text"]);
這個例子中,["name","firstName","text"]定義了相對於user 對象的可綁定屬性鏈。注意,在本例中,user 不是可綁定屬性鏈的一部分。在MXML 數據綁定表達式中,可綁定屬性連總
是相對於this。因此,要想定義一個同上面的MXML 等價的數據綁定表達式,應按如下例子使用bindProperty()方法:
bindProperty(myText, 'text', this, ["user", "name","firstName","text"]);