學習筆記 如何將對象用于Flex數據綁定
本文和大家重點討論一下如何將對象用于Flex數據綁定,當使用對象進行工作時,不得不考慮什么時候定義到這個對象的綁定?或者考慮什么時候定義一個到這個對象屬性的綁定?
將對象用于Flex數據綁定
當使用對象進行工作時,不得不考慮什么時候定義到這個對象的綁定?或者考慮什么時候定義一個到這個對象屬性的綁定?
綁定到對象
當使一個對象成為Flex數據綁定表達式的源時,Flex數據綁定發生在這個對象被更新之時,或者這個對象的引用被更新之時,但不能發生在這個對象的單個(數據)域(feild)被更新之時。
下面的范例中,創建了Object類的子類,這個子類帶有兩個屬性,stringProp和intProp,但沒有使這兩個屬性成為可綁定屬性:
- packagemyComponents
- {
- //binding/myComponents/NonBindableObject.as
- //Makenoclasspropertiesbindable.
- publicclassNonBindableObjectextendsObject{
- publicfunctionNonBindableObject(){
- super();
- }
- publicvarstringProp:String="Stringproperty";
- publicvarintProp:int=52;
- }
- }
因為這個類的兩個屬性不是可綁定屬性,當它們被更新時Flex不會發出事件去觸發Flex數據綁定。接下來在Flex應用中使用這個類,如下面的范例所示:
- <?xmlversionxmlversion="1.0"?>
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"
- creationComplete="initObj();">
- <![CDATA[
- importmyComponents.NonBindableObject;
- [Bindable]
- publicvarmyObj:NonBindableObject=newNonBindableObject();
- [Bindable]
- publicvaranotherObj:NonBindableObject=
- newNonBindableObject();
- publicfunctioninitObj():void{
- anotherObj.stringProp='anotherObject';
- anotherObj.intProp=8;
- }
- ]]>
- <mx:Buttonlabelmx:Buttonlabel="ChangemyObj.stringProp"
- click="myObj.stringProp='newstring';"/>
- <mx:Buttonlabelmx:Buttonlabel="ChangemyObj.intProp"
- click="myObj.intProp=10;"/>
- <mx:Buttonlabelmx:Buttonlabel="ChangemyObj"
- click="myObj=anotherObj;"/>
因為沒有使NonBindableObject類的單個數據域(fields)成為可綁定屬性,所以應用在兩個Text控件的綁定在應用啟動時以及在myObj被更新時才會被更新。在編譯這個應用時,編譯器會輸出警告信息,提示Flex數據綁定機制不能檢測stringProp和intProp屬性的變化。
綁定到對象的屬性
為了使對象的屬性可綁定,要創建新的類定義,如下面的范例所示:
- packagemyComponents
- {
- //binding/myComponents/BindableObject.as
- //Makeallclasspropertiesbindable.
- [Bindable]
- publicclassBindableObjectextendsObject{
- publicfunctionBindableObject(){
- super();
- }
- publicvarstringProp:String="Stringproperty";
- publicvarintProp:int=52;
- }
- }
通過在類定義之前放置[Bindable]元數據標記,就可以使得類中所有public變量、以及所有完全具備setter及getter的public屬性成為可綁定的屬性。接下來就可以使用stringProp和intProp屬性作為Flex數據綁定的源,如下范例所示:
- <?xmlversionxmlversion="1.0"?>
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"
- creationComplete="initObj();">
- <![CDATA[
- importmyComponents.BindableObject;
- [Bindable]
- publicvarmyObj:BindableObject=newBindableObject();
- [Bindable]
- publicvaranotherObj:BindableObject=
- newBindableObject();
- publicfunctioninitObj():void{
- anotherObj.stringProp='anotherObject';
- anotherObj.intProp=8;
- }
- ]]>
- <mx:Buttonlabelmx:Buttonlabel="ChangemyObj.stringProp"
- click="myObj.stringProp='newstring';"/>
- <mx:Buttonlabelmx:Buttonlabel="ChangemyObj.intProp"
- click="myObj.intProp=10;"/>
- <mx:Buttonlabelmx:Buttonlabel="ChangemyObj"
- click="myObj=anotherObj;"/>
【編輯推薦】