亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發(fā) > Flex > 正文

Flex Data Binding詳解

2024-09-12 17:51:28
字體:
供稿:網(wǎng)友
Data BindIng 什么時候發(fā)生:

1.在綁定源屬性值發(fā)生改變時發(fā)生。
2.在綁定源發(fā)出initialize事件時綁定發(fā)生一次。

讓屬性具有可綁定功能:

一般的,只要在屬性前加上
[Bindable] 或
[Bindable(event="eventname")]
元標(biāo)記即可
注意:
如果沒有標(biāo)出觸發(fā)綁定的事件,正如[Bindable],F(xiàn)lex會自動為綁定加上propertyChange事件,當(dāng)源數(shù)據(jù)發(fā)生變化時,F(xiàn)lex將自動派發(fā)該事件,觸發(fā)數(shù)據(jù)綁定。如果修改后數(shù)據(jù)和源數(shù)據(jù)“===”也就是全等,那么Flex將不會觸發(fā)數(shù)據(jù)綁定。
如果標(biāo)出的觸發(fā)綁定的事件,正如[Bindable(event="eventname")],那么在源數(shù)據(jù)發(fā)生改變的時候,必須dispatch出該事件才能觸發(fā)數(shù)據(jù)綁定。不論修改后數(shù)據(jù)和源數(shù)據(jù)是否全等,F(xiàn)lex都將會觸發(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()"/>
如果沒有this.dispatchEvent(new Event("hhhh"))這句,那么你點擊按鈕是沒有設(shè)么作用的。 另外當(dāng)申明自定義觸發(fā)事件時,用ChangeWatcher來監(jiān)控其變化,發(fā)現(xiàn)雖然目的源值變了,但是ChangeWatcher卻監(jiān)控不到變化,同樣ChangeWatcher也監(jiān)控不到非共有變量的變化。關(guān)于ChangeWatcher,下面會提到。
綁定函數(shù)――Functions,對象――Object,數(shù)組――Arrays
函數(shù):
你可以在{}中直接使用函數(shù)。例如:<mx:Text text="{Matn.random()*ss}"/>
上面這個沒有什么好講的,關(guān)于函數(shù)綁定下面這個比較重要:
<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ù)加一個[bindable],便使函數(shù)具有綁定功能,但是如果不申明自定義觸發(fā)事件,只能在組件初始化時綁定一次,點擊以上按鈕是沒有什么作用的。大家可以自己試試。

還有g(shù)etter和setter函數(shù),比較重要,給getter或setter函數(shù)加上[bindable],用不著兩個都加,加一個就可以了,例如:
<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()"/>
同樣能達到綁定效果,如果只有一個getter方法,那么要想實現(xiàn)數(shù)據(jù)綁定,就需要申明自定義觸發(fā)事件了,大家可以自己試試。
對象:
對象綁定最重要的是搞清楚怎么申明才能使其屬性具有綁定功能,例如:
申明對象 NonBindableObject
//[bindable] 先注釋掉這行,測試
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;"/>
如果在申明對象時沒有在類前加上[bindable]標(biāo)簽,那么該對象的所有屬性是不能被綁定的,也就是說當(dāng)對象屬性發(fā)生變化時,不會觸發(fā)綁定,所以點擊前兩個按鈕都是沒有用的,只有當(dāng)該對象本身發(fā)生變化時,才能夠觸發(fā)綁定,正如第三個按鈕的操作。
現(xiàn)在取消第一行的注釋,使對象屬性可綁定,那么再點前兩個按鈕試試。只要給對象加上[Bindable]元標(biāo)記,那么會使該對象的所有公有屬性――public和擁有g(shù)etter和setter方法的屬性具有綁定功能。
數(shù)組:
如果把數(shù)組作為綁定對象,那么最好使用ArrayCollection對象,因為當(dāng)使用ArrayCollection對象的一些API來操作數(shù)組會觸發(fā)數(shù)據(jù)綁定,如:ArrayCollection.addItem(), ArrayCollection.addItemAt(), ArrayCollection.removeItem(), and ArrayCollection.removeItemAt()方法 ,不然要直接使用Array的話,只用當(dāng)Array本身發(fā)生變化時才觸發(fā)數(shù)據(jù)綁定,當(dāng)數(shù)組中某一屬性發(fā)生變化時是不會觸發(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="改變對象"
click="myAC=myAC2"/>
當(dāng)使用[]形式來申明數(shù)組時,必須使用ArrayCollection的API方法來實現(xiàn)數(shù)據(jù)綁定,所以當(dāng)你點擊第一個按鈕時,text2發(fā)生了改變,而text1沒有。
數(shù)據(jù)綁定除了用[Bindable]標(biāo)簽來申明以外,也可以用<mx:Binding/>組件和ActionScript實現(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為目的源,按上面的寫法,不論是text1還是text2發(fā)生變化,都會引起對方的變化。細心的你也許會想這不會引起死循環(huán)嗎?答案是否定的,不會引起死循環(huán)。我想應(yīng)該是Flex內(nèi)部的機制已經(jīng)優(yōu)化了這種情況,讓其只觸發(fā)一次。
用ActionScript來綁定:
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ā)生變化時text2也跟著變,site為目的對象,prop為目的屬性,host為綁定源,china為綁定源屬性鏈――關(guān)于屬性鏈下面再講,commitOnly默認為False,即不管是確認事件還是未確認事件都將觸發(fā)綁定,而為True時,只有確認事件才能觸發(fā)綁定,這個一般用不到,和Flex自身的事件機制有關(guān),如果為false的話,當(dāng)數(shù)據(jù)改變時將觸發(fā)兩次綁定事件,當(dāng)為True時,只觸發(fā)一次,自己可以用bindSetter方法來做測試。當(dāng)不想綁定時可以用myc.unwatch()方法來解除綁定。

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ā)生變化時所觸發(fā)的函數(shù),其他參數(shù)都一樣。
3.使用ChangeWatcher.watch()。
同樣可以用ChangeWatcher.watch方法來監(jiān)控對象屬性的變化,非常有用。
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),你可以用所有事件的父類Event來表示。

注意:
as主要是通過mx.binding.utils.BindingUtils 這個類來實現(xiàn)數(shù)據(jù)綁定,用MXML和as實現(xiàn)數(shù)據(jù)綁定有以下幾點不同:
1.當(dāng)使用AS做數(shù)據(jù)綁定時,bindProperty()或 bindSetter()方法中不能使用AS代碼,這和MXML是不同的, 可以用bindSetter() 方法來申明一個綁定處理函數(shù)。
2.當(dāng)使用AS做數(shù)據(jù)綁定時,同樣不能使用EX4語法,也就是說不能直接使用XML解析語法了。
3.當(dāng)使用AS做數(shù)據(jù)綁定時,在屬性鏈中不能使用任何函數(shù)和數(shù)組。
4.MXML具有更好的錯誤提示和警告功能。
最后來講講屬性鏈。
屬性鏈就是bindProperty()和 bindSettet()等方法中的chain參數(shù)所表示的對象, 有時也許綁定源并不只是text1.text這樣的簡單形式,也可以是類似于user.name.text1.text,那么就存在一個關(guān)系鏈的問題,如果這條鏈中的某一項發(fā)生了改變,會不會觸發(fā)綁定呢?答案是如果你想讓其改變其中的某一項都能觸發(fā)數(shù)據(jù)綁定,那么這條鏈的每個元素必須是可綁定的。對于上面的這種形式,可以這樣使用bindProperty方法:
bindProperty(text2, "text", this, ["user", "name","text1","text"])。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产亚洲va综合人人澡精品| 欧美久久久网站| 日本wwww色| 国产成人亚洲精品自产在线| 亚洲精品va在线观看| 2022亚洲天堂| 日本精品久久中文字幕佐佐木| 牛人国产偷窥女洗浴在线观看| 日韩精品在线免费看| 老司机99精品99| 亚洲mv大片欧洲mv大片精品| a√天堂在线观看| 久久久久久久久成人| 亚洲欧美影音先锋| 久久久久国产精品免费网站| 久久精品一区二区三区不卡牛牛| 精品国产免费一区二区三区香蕉| 日色在线视频| 国产精品视频一区二区三区四区五区| 97人人爽人人澡人人精品| 久久九九精品| 在线免费观看黄色片| 国产成人av电影在线| 99国内精品久久久久久久软件| 精品国产视频一区二区三区| 国产精品av电影| 中文在线资源观看网站视频免费不卡| 亚洲无限乱码一二三四麻| 精品国产区一区二区三区在线观看| 亚洲成人福利在线| 国产在线你懂得| 精品乱码一区二区三四区视频| 久久精品av| 久久久久成人片免费观看蜜芽| 亚洲天堂国产精品| 亚洲第一在线视频| 91久久香蕉国产日韩欧美9色| 久久久无码精品亚洲国产| 一级毛片精品毛片| 国产一区二区三区久久久| 久久久久久免费视频| 亚洲AV无码片久久精品| 特一级黄色大片| 国产精品国产三级国产有无不卡| 99中文视频在线| 97视频免费看| 在线观看久久久久久| 欧美裸体bbwbbwbbw| www视频在线看| 农村黄色一级片| 日韩电影免费观看高清完整| 校园春色另类视频| 欧美1区2区3区4区| 卡一卡二国产精品| 国产成人av免费| 日本伊人精品一区二区三区观看方式| 国产精品国产精品| 色综合视频一区二区三区日韩| 亚洲视频专区在线| 欧美在线观看视频一区二区三区| 日韩三级视频中文字幕| 成人看片app| 一色屋色费精品视频在线看| 亚洲精品国产美女| 高清视频国产| 中文字幕欧美日韩va免费视频| 午夜精品一区二区三区国产| 中文久久乱码一区二区| 红桃av永久久久| 国产一区二区剧情av在线| 欧美欧美在线| 牛夜精品久久久久久久| 欧美高清性xxxx| 国产精品成人久久电影| 黄网址在线播放免费| 成人高清视频免费观看| 国产亚洲午夜| 天天久久人人| 久久精品亚洲94久久精品| 北京富婆泄欲对白| 免费观看性欧美大片无片| 91麻豆精东视频| 国产日韩欧美一区二区三区在线观看| 在线天堂资源www在线污| 欧美日韩激情在线观看| 国产99久久久久| 亚洲欧洲中文天堂| 国产免费久久av| 在线观看不卡一区| 天天看片激情网站| 久久色视频免费观看| 欧美激情国产高清| 欧美区一区二区| 国产精品久久久久7777按摩| 任我爽精品视频在线播放| 黄色网址在线免费看| 午夜精品无码一区二区三区| 欧洲一区二区三区在线| 日韩美女在线看| 青青草国产成人a∨下载安卓| 亚洲成av人乱码色午夜| 五月六月丁香婷婷| 久久一区二区视频| 亚洲成人tv| 黄色免费的网站| www.久久热.com| 曰本人一级毛片免费完整视频| 亚洲av无码一区二区三区性色| www.51色.com| 国产精品v欧美精品v日本精品动漫| 欧美私密网站| 成人av网站大全| 亚洲人成影院在线| 久久免费视频一区| 国产又黄又猛又爽| 国产精品爱久久久久久久小说| 欧美日韩在线三级| 人妻熟女aⅴ一区二区三区汇编| 国产一级特黄视频| 亚洲欧美日韩一区在线| 国产精品免费视频网站| 日韩欧美视频网站| 国产高清精品久久久久| 欧美vide| 91久久精品日日躁夜夜躁国产| 婷婷亚洲婷婷综合色香五月| 国产乱码精品一区二区亚洲| 亚洲亚洲精品三区日韩精品在线视频| 国产精品久久久久久久久久久久久久久| 欧美大交乱xxxxbbbb| 日韩欧美在线观看强乱免费| 国产精品免费视频一区| 26uuu精品一区二区| 91麻豆精品国产91久久久更新时间| 亚洲精品国产精品国产| 久久综合99re88久久爱| 欧美 日韩 国产 在线观看| 成人激情av在线| 中文一区在线| 欧美日韩精品一区二区三区视频| 亚洲人成自拍网站| 国产喷水theporn| 久久激情婷婷| 亚洲国产精品美女| 黄色免费在线网站| 免费在线观看日韩视频| 久久久久久无码午夜精品直播| 国产一区二区在线|播放| 日韩系列在线| 伊甸园精品99久久久久久| 精品入口蜜桃| 欧美亚洲大陆| 曰本大片免费观看视频| 亚洲自拍偷拍色图| 欧美e片成人在线播放乱妇| 5252色成人免费视频| 国产精品21p| 国产精品一区二区三区av| 欧日韩一区二区三区| 高潮一区二区| 精品国产91久久久久久久妲己| www久久com| 色狠狠久久av综合| 九九精品视频免费| 国产精品视频一二三区| 姬川优奈av一区二区在线电影| 国产欧美123| 日韩电影大全在线观看| 精品亚洲成av人在线观看| 亚洲精品一区二区在线观看| 91国偷自产中文字幕久久| 亚洲欧美一区二区视频| 国产福利一区二区三区在线观看| 美女网站视频在线观看| 久久久女人电视剧免费播放下载| 亚洲日本视频| 亚洲毛片亚洲毛片亚洲毛片| 亚洲天堂一区二区三区| 少妇淫片在线影院| 不卡在线一区| 亚洲a∨一区二区三区| 欧美视频裸体精品| 少妇性饥渴无码a区免费| 久久av高潮av| 一个人看的www一区| 婷婷在线精品视频| 国产精品女主播视频| 日韩精品一区二区三区在线播放| 亚洲av无码乱码在线观看性色| 国产精品第157页| 成人污版视频| 99精品视频一区二区三区| 在线免费91| 欧美牲交a欧美牲交aⅴ免费下载| 免费看日批视频| 精品一区在线| 亚洲免费观看在线视频| 巨大黑人video| 青青草原成人| 一区二区三区四区视频精品免费| 一级特黄性色生活片| 在线看片福利| 全部免费的黄色毛片| 欧美日韩亚洲国内综合网俺| 国产网红在线| 午夜影院黄色片| 国产婷婷色综合av蜜臀av| 日本电影亚洲天堂一区| 午夜一级在线看亚洲| 深爱激情五月婷婷| 亚洲成av人片乱码色午夜| 久久久久麻豆v国产精华液好用吗| 日韩免费大片| 欧美最猛黑人xxxxx猛交| 中文字幕av专区| 国产欧美一区二区| 影音先锋久久资源网| 天天看天天操| 伊人222成人综合网| 老牛嫩草一区二区三区日本| 日韩欧美在线综合| 亚洲性猛交富婆| 亚洲女子a中天字幕| 99re视频在线观看| 亚洲情侣在线| 日韩8x8x| 色爱av美腿丝袜综合粉嫩av| 日韩a∨精品日韩在线观看| 国产午夜亚洲精品一级在线| 久久久久麻豆v国产| 97超碰国产在线| 国产精品xxx在线观看| 一区二区三区四区视频精品免费| 欧美日韩视频精品一区二区| 亚洲免费网址| 国产999精品在线观看| 在线欧美日韩精品| 在线成人午夜影院| 成人网站免费观看入口| 精品久久久久久久久久久久久久久| 影音先锋成人资源网站| 欧美精品欧美极品欧美激情| 美女扒开大腿让男人桶| 久久久久久久久久网站| 日韩高清av| 欧美日韩123区| 九色视频入口| 丝袜足控免费网站xx网站| 国产亚洲视频中文字幕视频| 日本视频在线观看| 欧美亚洲视频一区| 黄色www网站| 狠狠躁夜夜躁人人躁婷婷91| 国产精品中文字幕在线观看| 色一情一乱一伦| 黄色国产精品视频| 夜夜精品浪潮av一区二区三区| 欧美黑人一级爽快片淫片高清| 国产精品乱码久久久| 精品国产一级片| av观看免费在线| 国产视频精品在线| 福利视频亚洲| 精品丝袜一区二区三区| 久久精品视频va| 欧美在线免费一级片| 完美搭档在线观看| 九九九九九九九九| 日本精品网站| 欧美日韩一级二级| 午夜精品国产更新| 午夜少妇久久久久久久久| 中文字幕一区二区三区在线乱码| 一个人看的www视频免费观看| 日韩成人免费观看| 欧美成人一区二免费视频软件| 亚洲一区av在线播放| 丰满岳乱妇国产精品一区| 国产精品乱码一区二区| 色偷偷偷综合中文字幕;dd| 亚洲人成网站在线播放2019| 国产精品亚洲人成在99www| 亚洲精品456在线播放狼人| 亚洲一区二区av| 成人18精品视频| 在线电影国产精品| 欧美精品尤物在线| 日本一区免费在线观看| 亚洲第一av| 国产999精品久久久久久| 欧美一区1区三区3区公司| 最近看过的日韩成人| 久久国产生活片100| 欧美jizzhd精品欧美巨大免费| 精品久久久久久久一区二区蜜臀| 中文字幕人妻一区二区三区视频| 欧美不卡视频一区| 国产欧美精品一区二区三区-老狼| 日韩精品福利在线| 国产美女精品| 成人三级视频在线观看| 一区二区免费在线观看视频| 国产精品视频a| 国产成人高清视频| 日韩免费av电影| 无人视频在线观看免费| 伊人春色在线| gogo久久日韩裸体艺术| 蜜桃91精品入口| 亚洲精品乱码久久久久久按摩观| 成人在线视频网| 日韩一级免费毛片| 99国产欧美另类久久久精品| 日本成人黄色网址| 日本中文字幕精品| 国产传媒日韩欧美成人| av黄色一级片| 久国产精品韩国三级视频| 国产亚洲精品91在线| 免费视频一区| 婷婷激情五月综合| h视频在线观看免费完整版| 都市激情亚洲综合| 国内国产区免费视频| gai在线观看免费高清| bdsm精品捆绑chinese| 国产成人综合精品三级| 日本免费视频|