Flex Data Binding詳解
更新時(shí)間:2009年09月20日 17:47:23 作者:
Data BindIng簡(jiǎn)單的說(shuō)就是當(dāng)綁定源屬性發(fā)生變化時(shí),F(xiàn)lex 會(huì)把綁定源變化后屬性的值賦給目的物的屬性。做到了數(shù)據(jù)同步。
Data BindIng 什么時(shí)候發(fā)生:
1.在綁定源屬性值發(fā)生改變時(shí)發(fā)生。
2.在綁定源發(fā)出initialize事件時(shí)綁定發(fā)生一次。
讓屬性具有可綁定功能:
一般的,只要在屬性前加上
[Bindable] 或
[Bindable(event="eventname")]
元標(biāo)記即可
注意:
如果沒(méi)有標(biāo)出觸發(fā)綁定的事件,正如[Bindable],F(xiàn)lex會(huì)自動(dòng)為綁定加上propertyChange事件,當(dāng)源數(shù)據(jù)發(fā)生變化時(shí),F(xiàn)lex將自動(dòng)派發(fā)該事件,觸發(fā)數(shù)據(jù)綁定。如果修改后數(shù)據(jù)和源數(shù)據(jù)“===”也就是全等,那么Flex將不會(huì)觸發(fā)數(shù)據(jù)綁定。
如果標(biāo)出的觸發(fā)綁定的事件,正如[Bindable(event="eventname")],那么在源數(shù)據(jù)發(fā)生改變的時(shí)候,必須dispatch出該事件才能觸發(fā)數(shù)據(jù)綁定。不論修改后數(shù)據(jù)和源數(shù)據(jù)是否全等,F(xiàn)lex都將會(huì)觸發(fā)數(shù)據(jù)綁定,需要自己編程控制,例如:
<mx:Script>
<![CDATA[
[Bindable(event="hhhh")]
private var ss:String="aaa";
private function doTest():void
{
ss="bbb";
if(ss!=="aaa") / /判斷和源數(shù)據(jù)是否相等,不相等則觸發(fā)綁定
this.dispatchEvent(new Event("hhhh"));
}
]]>
</mx:Script>
<mx:Text text="{ss}"/>
<mx:Button click="doTest()"/>
如果沒(méi)有this.dispatchEvent(new Event("hhhh"))這句,那么你點(diǎn)擊按鈕是沒(méi)有設(shè)么作用的。 另外當(dāng)申明自定義觸發(fā)事件時(shí),用ChangeWatcher來(lái)監(jiān)控其變化,發(fā)現(xiàn)雖然目的源值變了,但是ChangeWatcher卻監(jiān)控不到變化,同樣ChangeWatcher也監(jiān)控不到非共有變量的變化。關(guān)于ChangeWatcher,下面會(huì)提到。
綁定函數(shù)——Functions,對(duì)象——Object,數(shù)組——Arrays
函數(shù):
你可以在{}中直接使用函數(shù)。例如:<mx:Text text="{Matn.random()*ss}"/>
上面這個(gè)沒(méi)有什么好講的,關(guān)于函數(shù)綁定下面這個(gè)比較重要:
<mx:Script>
<![CDATA[
public var ss:String="aaa";
[Bindable(event="hhhh")]
private function gg():String
{
return ss;
}
private function doTest():void
{
ss=Math.random().toString();
this.dispatchEvent(new Event("hhhh"));
}
]]>
</mx:Script>
<mx:Text text="{gg()}"/>
<mx:Button click="doTest()"/>
這樣給函數(shù)加一個(gè)[bindable],便使函數(shù)具有綁定功能,但是如果不申明自定義觸發(fā)事件,只能在組件初始化時(shí)綁定一次,點(diǎn)擊以上按鈕是沒(méi)有什么作用的。大家可以自己試試。
還有g(shù)etter和setter函數(shù),比較重要,給getter或setter函數(shù)加上[bindable],用不著兩個(gè)都加,加一個(gè)就可以了,例如:
<mx:Script>
<![CDATA[
public var ss:String="aaa";
[Bindable]
public function get gg():String
{
return ss;
}
public function set gg(value:String):void
{
ss=value;
}
private function doTest():void
{
gg=Math.random().toString();
this.dispatchEvent(new Event("hhhh"));
}
]]>
</mx:Script>
<mx:Text text="{gg}"/>
<mx:Button click="doTest()"/>
同樣能達(dá)到綁定效果,如果只有一個(gè)getter方法,那么要想實(shí)現(xiàn)數(shù)據(jù)綁定,就需要申明自定義觸發(fā)事件了,大家可以自己試試。
對(duì)象:
對(duì)象綁定最重要的是搞清楚怎么申明才能使其屬性具有綁定功能,例如:
申明對(duì)象 NonBindableObject
//[bindable] 先注釋掉這行,測(cè)試
public class NonBindableObject extends Object
{
public function NonBindableObject() {
super();
}
public var stringProp:String = "String property";
public var intProp:int = 52;
}
綁定
<mx:Script>
<![CDATA[
[Bindable]
public var myObj:NonBindableObject = new NonBindableObject();
[Bindable]
public var anotherObj:NonBindableObject =
new NonBindableObject();
public function initObj():void {
anotherObj.stringProp = 'anotherObject';
anotherObj.intProp = 8;
}
]]>
</mx:Script>
<mx:Text id="text1" text="{myObj.stringProp}"/>
<mx:Text id="text2" text="{myObj.intProp}"/>
<mx:Button label="改變 myObj.stringProp"
click="myObj.stringProp = 'new string';"/>
<mx:Button label="改變 myObj.intProp"
click="myObj.intProp = 10;"/>
<mx:Button label="Change myObj"
click="myObj = anotherObj;"/>
如果在申明對(duì)象時(shí)沒(méi)有在類(lèi)前加上[bindable]標(biāo)簽,那么該對(duì)象的所有屬性是不能被綁定的,也就是說(shuō)當(dāng)對(duì)象屬性發(fā)生變化時(shí),不會(huì)觸發(fā)綁定,所以點(diǎn)擊前兩個(gè)按鈕都是沒(méi)有用的,只有當(dāng)該對(duì)象本身發(fā)生變化時(shí),才能夠觸發(fā)綁定,正如第三個(gè)按鈕的操作。
現(xiàn)在取消第一行的注釋?zhuān)箤?duì)象屬性可綁定,那么再點(diǎn)前兩個(gè)按鈕試試。只要給對(duì)象加上[Bindable]元標(biāo)記,那么會(huì)使該對(duì)象的所有公有屬性——public和擁有g(shù)etter和setter方法的屬性具有綁定功能。
數(shù)組:
如果把數(shù)組作為綁定對(duì)象,那么最好使用ArrayCollection對(duì)象,因?yàn)楫?dāng)使用ArrayCollection對(duì)象的一些API來(lái)操作數(shù)組會(huì)觸發(fā)數(shù)據(jù)綁定,如:ArrayCollection.addItem(), ArrayCollection.addItemAt(), ArrayCollection.removeItem(), and ArrayCollection.removeItemAt()方法 ,不然要直接使用Array的話(huà),只用當(dāng)Array本身發(fā)生變化時(shí)才觸發(fā)數(shù)據(jù)綁定,當(dāng)數(shù)組中某一屬性發(fā)生變化時(shí)是不會(huì)觸發(fā)數(shù)據(jù)綁定的。例如:
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var myAC:Array =["One", "Two", "Three", "Four"];
[Bindable]
public var myAC2:Array =["One1", "Two1", "Three1", "Four1"];
]]>
</mx:Script>
<mx:Text id="text1" text="{myAC[0]}"/>
<mx:Text id="text2" text="{myAC.getItemAt(0)}"/>
<mx:Button id="button1"
label="改變某一屬性"
click="myAC[0]='new One'"/>
<mx:Button id="button2"
label="改變對(duì)象"
click="myAC=myAC2"/>
當(dāng)使用[]形式來(lái)申明數(shù)組時(shí),必須使用ArrayCollection的API方法來(lái)實(shí)現(xiàn)數(shù)據(jù)綁定,所以當(dāng)你點(diǎn)擊第一個(gè)按鈕時(shí),text2發(fā)生了改變,而text1沒(méi)有。
數(shù)據(jù)綁定除了用[Bindable]標(biāo)簽來(lái)申明以外,也可以用<mx:Binding/>組件和ActionScript實(shí)現(xiàn)。
用<mx:Binding/>,例如:
<mx:binding source="text1.text" destination="text2.text"/>
<mx:binging source="text2.text" destination="text1.text"/>
<mx:TextInput id="text1"/>
<mx:TextInput id="text2"/>
source為綁定源,destination為目的源,按上面的寫(xiě)法,不論是text1還是text2發(fā)生變化,都會(huì)引起對(duì)方的變化。細(xì)心的你也許會(huì)想這不會(huì)引起死循環(huán)嗎?答案是否定的,不會(huì)引起死循環(huán)。我想應(yīng)該是Flex內(nèi)部的機(jī)制已經(jīng)優(yōu)化了這種情況,讓其只觸發(fā)一次。
用ActionScript來(lái)綁定:
1.使用bindProperty()。
bindProperty(site:Object, prop:String,host:Object, chain:Object,commitOnly:Boolean = false):ChangeWatcher,例如:
var myc:ChangeWatcher=BindingUtils.bindProperty(text2,"text",text1,"text");
即當(dāng)text1的值發(fā)生變化時(shí)text2也跟著變,site為目的對(duì)象,prop為目的屬性,host為綁定源,china為綁定源屬性鏈——關(guān)于屬性鏈下面再講,commitOnly默認(rèn)為False,即不管是確認(rèn)事件還是未確認(rèn)事件都將觸發(fā)綁定,而為T(mén)rue時(shí),只有確認(rèn)事件才能觸發(fā)綁定,這個(gè)一般用不到,和Flex自身的事件機(jī)制有關(guān),如果為false的話(huà),當(dāng)數(shù)據(jù)改變時(shí)將觸發(fā)兩次綁定事件,當(dāng)為T(mén)rue時(shí),只觸發(fā)一次,自己可以用bindSetter方法來(lái)做測(cè)試。當(dāng)不想綁定時(shí)可以用myc.unwatch()方法來(lái)解除綁定。
2.使用bindSetter()。
bindSetter(setter:Function, host:Object, chain:Object,commitOnly:Boolean = false):ChangeWatcher,例如:
var myc:ChangeWatcher=BindingUtils.bindSetter(change,text1,"text",true);
private function change(str:String):void
{
text2.text=str;
}
change就是當(dāng)綁定源發(fā)生變化時(shí)所觸發(fā)的函數(shù),其他參數(shù)都一樣。
3.使用ChangeWatcher.watch()。
同樣可以用ChangeWatcher.watch方法來(lái)監(jiān)控對(duì)象屬性的變化,非常有用。
watch(host:Object, chain:Object,handler:Function,commitOnly:Boolean = false):ChangeWatcher,例如:
var myc:ChangeWatcher=ChangeWatcher.watch(text1,"text",change);
private function change(e:Event):void
{
text2.text=text1.text;
}
這里的Event和綁定數(shù)據(jù)所定義的觸發(fā)事件有關(guān),你可以用所有事件的父類(lèi)Event來(lái)表示。
注意:
as主要是通過(guò)mx.binding.utils.BindingUtils 這個(gè)類(lèi)來(lái)實(shí)現(xiàn)數(shù)據(jù)綁定,用MXML和as實(shí)現(xiàn)數(shù)據(jù)綁定有以下幾點(diǎn)不同:
1.當(dāng)使用AS做數(shù)據(jù)綁定時(shí),bindProperty()或 bindSetter()方法中不能使用AS代碼,這和MXML是不同的, 可以用bindSetter() 方法來(lái)申明一個(gè)綁定處理函數(shù)。
2.當(dāng)使用AS做數(shù)據(jù)綁定時(shí),同樣不能使用EX4語(yǔ)法,也就是說(shuō)不能直接使用XML解析語(yǔ)法了。
3.當(dāng)使用AS做數(shù)據(jù)綁定時(shí),在屬性鏈中不能使用任何函數(shù)和數(shù)組。
4.MXML具有更好的錯(cuò)誤提示和警告功能。
最后來(lái)講講屬性鏈。
屬性鏈就是bindProperty()和 bindSettet()等方法中的chain參數(shù)所表示的對(duì)象, 有時(shí)也許綁定源并不只是text1.text這樣的簡(jiǎn)單形式,也可以是類(lèi)似于user.name.text1.text,那么就存在一個(gè)關(guān)系鏈的問(wèn)題,如果這條鏈中的某一項(xiàng)發(fā)生了改變,會(huì)不會(huì)觸發(fā)綁定呢?答案是如果你想讓其改變其中的某一項(xiàng)都能觸發(fā)數(shù)據(jù)綁定,那么這條鏈的每個(gè)元素必須是可綁定的。對(duì)于上面的這種形式,可以這樣使用bindProperty方法:
bindProperty(text2, "text", this, ["user", "name","text1","text"])。
1.在綁定源屬性值發(fā)生改變時(shí)發(fā)生。
2.在綁定源發(fā)出initialize事件時(shí)綁定發(fā)生一次。
讓屬性具有可綁定功能:
一般的,只要在屬性前加上
[Bindable] 或
[Bindable(event="eventname")]
元標(biāo)記即可
注意:
如果沒(méi)有標(biāo)出觸發(fā)綁定的事件,正如[Bindable],F(xiàn)lex會(huì)自動(dòng)為綁定加上propertyChange事件,當(dāng)源數(shù)據(jù)發(fā)生變化時(shí),F(xiàn)lex將自動(dòng)派發(fā)該事件,觸發(fā)數(shù)據(jù)綁定。如果修改后數(shù)據(jù)和源數(shù)據(jù)“===”也就是全等,那么Flex將不會(huì)觸發(fā)數(shù)據(jù)綁定。
如果標(biāo)出的觸發(fā)綁定的事件,正如[Bindable(event="eventname")],那么在源數(shù)據(jù)發(fā)生改變的時(shí)候,必須dispatch出該事件才能觸發(fā)數(shù)據(jù)綁定。不論修改后數(shù)據(jù)和源數(shù)據(jù)是否全等,F(xiàn)lex都將會(huì)觸發(fā)數(shù)據(jù)綁定,需要自己編程控制,例如:
<mx:Script>
<![CDATA[
[Bindable(event="hhhh")]
private var ss:String="aaa";
private function doTest():void
{
ss="bbb";
if(ss!=="aaa") / /判斷和源數(shù)據(jù)是否相等,不相等則觸發(fā)綁定
this.dispatchEvent(new Event("hhhh"));
}
]]>
</mx:Script>
<mx:Text text="{ss}"/>
<mx:Button click="doTest()"/>
如果沒(méi)有this.dispatchEvent(new Event("hhhh"))這句,那么你點(diǎn)擊按鈕是沒(méi)有設(shè)么作用的。 另外當(dāng)申明自定義觸發(fā)事件時(shí),用ChangeWatcher來(lái)監(jiān)控其變化,發(fā)現(xiàn)雖然目的源值變了,但是ChangeWatcher卻監(jiān)控不到變化,同樣ChangeWatcher也監(jiān)控不到非共有變量的變化。關(guān)于ChangeWatcher,下面會(huì)提到。
綁定函數(shù)——Functions,對(duì)象——Object,數(shù)組——Arrays
函數(shù):
你可以在{}中直接使用函數(shù)。例如:<mx:Text text="{Matn.random()*ss}"/>
上面這個(gè)沒(méi)有什么好講的,關(guān)于函數(shù)綁定下面這個(gè)比較重要:
<mx:Script>
<![CDATA[
public var ss:String="aaa";
[Bindable(event="hhhh")]
private function gg():String
{
return ss;
}
private function doTest():void
{
ss=Math.random().toString();
this.dispatchEvent(new Event("hhhh"));
}
]]>
</mx:Script>
<mx:Text text="{gg()}"/>
<mx:Button click="doTest()"/>
這樣給函數(shù)加一個(gè)[bindable],便使函數(shù)具有綁定功能,但是如果不申明自定義觸發(fā)事件,只能在組件初始化時(shí)綁定一次,點(diǎn)擊以上按鈕是沒(méi)有什么作用的。大家可以自己試試。
還有g(shù)etter和setter函數(shù),比較重要,給getter或setter函數(shù)加上[bindable],用不著兩個(gè)都加,加一個(gè)就可以了,例如:
<mx:Script>
<![CDATA[
public var ss:String="aaa";
[Bindable]
public function get gg():String
{
return ss;
}
public function set gg(value:String):void
{
ss=value;
}
private function doTest():void
{
gg=Math.random().toString();
this.dispatchEvent(new Event("hhhh"));
}
]]>
</mx:Script>
<mx:Text text="{gg}"/>
<mx:Button click="doTest()"/>
同樣能達(dá)到綁定效果,如果只有一個(gè)getter方法,那么要想實(shí)現(xiàn)數(shù)據(jù)綁定,就需要申明自定義觸發(fā)事件了,大家可以自己試試。
對(duì)象:
對(duì)象綁定最重要的是搞清楚怎么申明才能使其屬性具有綁定功能,例如:
申明對(duì)象 NonBindableObject
//[bindable] 先注釋掉這行,測(cè)試
public class NonBindableObject extends Object
{
public function NonBindableObject() {
super();
}
public var stringProp:String = "String property";
public var intProp:int = 52;
}
綁定
<mx:Script>
<![CDATA[
[Bindable]
public var myObj:NonBindableObject = new NonBindableObject();
[Bindable]
public var anotherObj:NonBindableObject =
new NonBindableObject();
public function initObj():void {
anotherObj.stringProp = 'anotherObject';
anotherObj.intProp = 8;
}
]]>
</mx:Script>
<mx:Text id="text1" text="{myObj.stringProp}"/>
<mx:Text id="text2" text="{myObj.intProp}"/>
<mx:Button label="改變 myObj.stringProp"
click="myObj.stringProp = 'new string';"/>
<mx:Button label="改變 myObj.intProp"
click="myObj.intProp = 10;"/>
<mx:Button label="Change myObj"
click="myObj = anotherObj;"/>
如果在申明對(duì)象時(shí)沒(méi)有在類(lèi)前加上[bindable]標(biāo)簽,那么該對(duì)象的所有屬性是不能被綁定的,也就是說(shuō)當(dāng)對(duì)象屬性發(fā)生變化時(shí),不會(huì)觸發(fā)綁定,所以點(diǎn)擊前兩個(gè)按鈕都是沒(méi)有用的,只有當(dāng)該對(duì)象本身發(fā)生變化時(shí),才能夠觸發(fā)綁定,正如第三個(gè)按鈕的操作。
現(xiàn)在取消第一行的注釋?zhuān)箤?duì)象屬性可綁定,那么再點(diǎn)前兩個(gè)按鈕試試。只要給對(duì)象加上[Bindable]元標(biāo)記,那么會(huì)使該對(duì)象的所有公有屬性——public和擁有g(shù)etter和setter方法的屬性具有綁定功能。
數(shù)組:
如果把數(shù)組作為綁定對(duì)象,那么最好使用ArrayCollection對(duì)象,因?yàn)楫?dāng)使用ArrayCollection對(duì)象的一些API來(lái)操作數(shù)組會(huì)觸發(fā)數(shù)據(jù)綁定,如:ArrayCollection.addItem(), ArrayCollection.addItemAt(), ArrayCollection.removeItem(), and ArrayCollection.removeItemAt()方法 ,不然要直接使用Array的話(huà),只用當(dāng)Array本身發(fā)生變化時(shí)才觸發(fā)數(shù)據(jù)綁定,當(dāng)數(shù)組中某一屬性發(fā)生變化時(shí)是不會(huì)觸發(fā)數(shù)據(jù)綁定的。例如:
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var myAC:Array =["One", "Two", "Three", "Four"];
[Bindable]
public var myAC2:Array =["One1", "Two1", "Three1", "Four1"];
]]>
</mx:Script>
<mx:Text id="text1" text="{myAC[0]}"/>
<mx:Text id="text2" text="{myAC.getItemAt(0)}"/>
<mx:Button id="button1"
label="改變某一屬性"
click="myAC[0]='new One'"/>
<mx:Button id="button2"
label="改變對(duì)象"
click="myAC=myAC2"/>
當(dāng)使用[]形式來(lái)申明數(shù)組時(shí),必須使用ArrayCollection的API方法來(lái)實(shí)現(xiàn)數(shù)據(jù)綁定,所以當(dāng)你點(diǎn)擊第一個(gè)按鈕時(shí),text2發(fā)生了改變,而text1沒(méi)有。
數(shù)據(jù)綁定除了用[Bindable]標(biāo)簽來(lái)申明以外,也可以用<mx:Binding/>組件和ActionScript實(shí)現(xiàn)。
用<mx:Binding/>,例如:
<mx:binding source="text1.text" destination="text2.text"/>
<mx:binging source="text2.text" destination="text1.text"/>
<mx:TextInput id="text1"/>
<mx:TextInput id="text2"/>
source為綁定源,destination為目的源,按上面的寫(xiě)法,不論是text1還是text2發(fā)生變化,都會(huì)引起對(duì)方的變化。細(xì)心的你也許會(huì)想這不會(huì)引起死循環(huán)嗎?答案是否定的,不會(huì)引起死循環(huán)。我想應(yīng)該是Flex內(nèi)部的機(jī)制已經(jīng)優(yōu)化了這種情況,讓其只觸發(fā)一次。
用ActionScript來(lái)綁定:
1.使用bindProperty()。
bindProperty(site:Object, prop:String,host:Object, chain:Object,commitOnly:Boolean = false):ChangeWatcher,例如:
var myc:ChangeWatcher=BindingUtils.bindProperty(text2,"text",text1,"text");
即當(dāng)text1的值發(fā)生變化時(shí)text2也跟著變,site為目的對(duì)象,prop為目的屬性,host為綁定源,china為綁定源屬性鏈——關(guān)于屬性鏈下面再講,commitOnly默認(rèn)為False,即不管是確認(rèn)事件還是未確認(rèn)事件都將觸發(fā)綁定,而為T(mén)rue時(shí),只有確認(rèn)事件才能觸發(fā)綁定,這個(gè)一般用不到,和Flex自身的事件機(jī)制有關(guān),如果為false的話(huà),當(dāng)數(shù)據(jù)改變時(shí)將觸發(fā)兩次綁定事件,當(dāng)為T(mén)rue時(shí),只觸發(fā)一次,自己可以用bindSetter方法來(lái)做測(cè)試。當(dāng)不想綁定時(shí)可以用myc.unwatch()方法來(lái)解除綁定。
2.使用bindSetter()。
bindSetter(setter:Function, host:Object, chain:Object,commitOnly:Boolean = false):ChangeWatcher,例如:
var myc:ChangeWatcher=BindingUtils.bindSetter(change,text1,"text",true);
private function change(str:String):void
{
text2.text=str;
}
change就是當(dāng)綁定源發(fā)生變化時(shí)所觸發(fā)的函數(shù),其他參數(shù)都一樣。
3.使用ChangeWatcher.watch()。
同樣可以用ChangeWatcher.watch方法來(lái)監(jiān)控對(duì)象屬性的變化,非常有用。
watch(host:Object, chain:Object,handler:Function,commitOnly:Boolean = false):ChangeWatcher,例如:
var myc:ChangeWatcher=ChangeWatcher.watch(text1,"text",change);
private function change(e:Event):void
{
text2.text=text1.text;
}
這里的Event和綁定數(shù)據(jù)所定義的觸發(fā)事件有關(guān),你可以用所有事件的父類(lèi)Event來(lái)表示。
注意:
as主要是通過(guò)mx.binding.utils.BindingUtils 這個(gè)類(lèi)來(lái)實(shí)現(xiàn)數(shù)據(jù)綁定,用MXML和as實(shí)現(xiàn)數(shù)據(jù)綁定有以下幾點(diǎn)不同:
1.當(dāng)使用AS做數(shù)據(jù)綁定時(shí),bindProperty()或 bindSetter()方法中不能使用AS代碼,這和MXML是不同的, 可以用bindSetter() 方法來(lái)申明一個(gè)綁定處理函數(shù)。
2.當(dāng)使用AS做數(shù)據(jù)綁定時(shí),同樣不能使用EX4語(yǔ)法,也就是說(shuō)不能直接使用XML解析語(yǔ)法了。
3.當(dāng)使用AS做數(shù)據(jù)綁定時(shí),在屬性鏈中不能使用任何函數(shù)和數(shù)組。
4.MXML具有更好的錯(cuò)誤提示和警告功能。
最后來(lái)講講屬性鏈。
屬性鏈就是bindProperty()和 bindSettet()等方法中的chain參數(shù)所表示的對(duì)象, 有時(shí)也許綁定源并不只是text1.text這樣的簡(jiǎn)單形式,也可以是類(lèi)似于user.name.text1.text,那么就存在一個(gè)關(guān)系鏈的問(wèn)題,如果這條鏈中的某一項(xiàng)發(fā)生了改變,會(huì)不會(huì)觸發(fā)綁定呢?答案是如果你想讓其改變其中的某一項(xiàng)都能觸發(fā)數(shù)據(jù)綁定,那么這條鏈的每個(gè)元素必須是可綁定的。對(duì)于上面的這種形式,可以這樣使用bindProperty方法:
bindProperty(text2, "text", this, ["user", "name","text1","text"])。
相關(guān)文章
基于Socket的網(wǎng)絡(luò)連接 Flex與.NET互操作(一)
Flash/Flex也支持基于Socket的網(wǎng)絡(luò)連接 ,服務(wù)器端可以是C++,VB,C#,Java等任一語(yǔ)言開(kāi)發(fā)。監(jiān)聽(tīng)一個(gè)網(wǎng)絡(luò)端口便可以接收到Flash/Flex開(kāi)發(fā)的客戶(hù)端的連接。2009-06-06使用asx3m與xstream配合解決flex與java利用httpservice傳遞xml數(shù)據(jù)問(wèn)題
過(guò)年期間抽空在弄flex前端對(duì)象與后端java對(duì)象利用httpservice交互的問(wèn)題。比如前端需要user list數(shù)據(jù),構(gòu)造了flex user object類(lèi)。2009-02-02Flex與.NET互操作(十):FluorineFx.Net的及時(shí)通信應(yīng)用(ApplicationAdapter)(一)
使用FluorineFx.Net開(kāi)發(fā)的每一個(gè)實(shí)時(shí)通訊功能應(yīng)用都擁有一個(gè)應(yīng)用程序適配器(ApplicationAdapter),用來(lái)管理整個(gè)實(shí)時(shí)通訊應(yīng)用的生命周期,以及接受和拒絕客戶(hù)端的連接等。2009-06-06Flex和.NET協(xié)同開(kāi)發(fā)利器FluorineFx Flex與.NET互操作
在本系列前面幾篇文章中分別介紹了通過(guò)WebService、HTTPService、URLLoader以及FielReference等組件或類(lèi)來(lái)完成Flex與.NET服務(wù)端的通信的相關(guān)知識(shí)點(diǎn)。2009-06-06