學(xué)習(xí)筆記 如何將對象用于Flex數(shù)據(jù)綁定
本文和大家重點討論一下如何將對象用于Flex數(shù)據(jù)綁定,當(dāng)使用對象進行工作時,不得不考慮什么時候定義到這個對象的綁定?或者考慮什么時候定義一個到這個對象屬性的綁定?
將對象用于Flex數(shù)據(jù)綁定
當(dāng)使用對象進行工作時,不得不考慮什么時候定義到這個對象的綁定?或者考慮什么時候定義一個到這個對象屬性的綁定?
綁定到對象
當(dāng)使一個對象成為Flex數(shù)據(jù)綁定表達式的源時,F(xiàn)lex數(shù)據(jù)綁定發(fā)生在這個對象被更新之時,或者這個對象的引用被更新之時,但不能發(fā)生在這個對象的單個(數(shù)據(jù))域(feild)被更新之時。
下面的范例中,創(chuàng)建了Object類的子類,這個子類帶有兩個屬性,stringProp和intProp,但沒有使這兩個屬性成為可綁定屬性:
- packagemyComponents
- {
- //binding/myComponents/NonBindableObject.as
- //Makenoclasspropertiesbindable.
- publicclassNonBindableObjectextendsObject{
- publicfunctionNonBindableObject(){
- super();
- }
- publicvarstringProp:String="Stringproperty";
- publicvarintProp:int=52;
- }
- }
因為這個類的兩個屬性不是可綁定屬性,當(dāng)它們被更新時Flex不會發(fā)出事件去觸發(fā)Flex數(shù)據(jù)綁定。接下來在Flex應(yīng)用中使用這個類,如下面的范例所示:
- <?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類的單個數(shù)據(jù)域(fields)成為可綁定屬性,所以應(yīng)用在兩個Text控件的綁定在應(yīng)用啟動時以及在myObj被更新時才會被更新。在編譯這個應(yīng)用時,編譯器會輸出警告信息,提示Flex數(shù)據(jù)綁定機制不能檢測stringProp和intProp屬性的變化。
綁定到對象的屬性
為了使對象的屬性可綁定,要創(chuàng)建新的類定義,如下面的范例所示:
- packagemyComponents
- {
- //binding/myComponents/BindableObject.as
- //Makeallclasspropertiesbindable.
- [Bindable]
- publicclassBindableObjectextendsObject{
- publicfunctionBindableObject(){
- super();
- }
- publicvarstringProp:String="Stringproperty";
- publicvarintProp:int=52;
- }
- }
通過在類定義之前放置[Bindable]元數(shù)據(jù)標(biāo)記,就可以使得類中所有public變量、以及所有完全具備setter及getter的public屬性成為可綁定的屬性。接下來就可以使用stringProp和intProp屬性作為Flex數(shù)據(jù)綁定的源,如下范例所示:
- <?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;"/>
【編輯推薦】
- Flex數(shù)據(jù)綁定中綁定到函數(shù)、對象和數(shù)組
- 在Flex數(shù)據(jù)綁定中使用數(shù)組
- 術(shù)語匯編 Flex數(shù)據(jù)綁定概述
- 解析Flex全屏模式設(shè)置方法
- Flex內(nèi)存泄露解決方法和內(nèi)存釋放優(yōu)化原則