成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Flex數據綁定中使用Bindable元數據標記的三種方式

開發 后端
本文向大家介紹一下使用Bindable元數據標記Flex數據綁定,當屬性成為Flex數據綁定表達式源時,Flex在源屬性發生變化時自動將源屬性的值拷貝給目的屬性。

本文和大家重點討論一下Flex數據綁定,Flex數據綁定需要一個源屬性,一個目的屬性,以及用于表明何時將數據從源屬性拷貝到目的屬性的觸發事件。當源屬性變化時,對象發出觸發事件。

Flex數據綁定

使用Bindable元數據標記

當屬性成為Flex數據綁定表達式源時,Flex在源屬性發生變化時自動將源屬性的值拷貝給目的屬性。為了告知Flex去執行這個拷貝工作,必須用[Bindable]元數據標記將這個屬性注冊到Flex中,并且源屬性必須發出一個事件。

[Bindable]元數據標記語法如下:
 

  1. [Bindable]  
  2. [Bindable(event="eventname")] 

如果忽略事件名稱,Flex會自動創建一個名為propertyChange,類型為PropertyChangeEvent的事件。可以在三個地方使用[Bindable]元數據標記:

1.在public類定義之前使用。

在這個地方使用[Bindable]元數據標記使得類中定義的全部public變量以及同時具有setter和getter方法的public屬性能成為Flex數據綁定表達式的源。這種情況下,[Bindable]不使用任何參數,如下例所示:
 

  1. [Bindable]  
  2. publicclassTextAreaFontControlextendsTextArea{} 

Flex編譯器自動為所有public屬性生成名為propertyChange,類型為PropertyChangeEvent的事件,以使這些屬性可以被用于Flex數據綁定表達式的源。
如果對屬性進行寫操作的時候屬性值保持不變,Flex不會發出事件或者更新屬性,這里判斷屬性是否不同可以翻譯為如下的檢測語句:
(oldValue!==value)
這意味著,如果屬性包含了一個對象引用,并且引用被更改為引用了一個不同但是等價的對象,那么綁定也會被觸發。如果屬性沒有被改變,而它所指向的對象在內部發生了變化,那么綁定不會被觸發。
注意:在publicclass定義之前使用[Bindable]元數據標記只是將綁定作用于public屬性,它不會作用于private和protected屬性以及那些定義在其他namespace中的屬性。必須在非public屬性前插入[Bindable]元數據標記,才能使之成為Flex數據綁定表達式的源。

2.在public,protected或者private屬性之前使用該標記可以將這個特定的屬性定義為支持Flex數據綁定。

標記可以有以下的形式:
 

  1. [Bindable]  
  2. publicvarfoo:String; 


Flex編譯器自動為那個屬性產生名為propertyChange,類型為PropertyChangeEvent的事件,如果寫入的屬性值不變,Flex不會發出事件或者更新屬性。也可以在[Bindable]元數據標記中指定事件名,如下的例子所示:
 

  1. [Bindable(event="fooChanged")]  
  2. publicvarfoo:String; 


這種情況下,開發者要自己負責產生和發出事件,通常在類的其他方法中完成這些工作。盡管在類的級別上指定了[Bindable]標記,如果想要為事件命名,仍然可以在[Bindable]中包含指定名稱的事件。#p#

3.在由getter或者setter方法所定義的public,protected或者private屬性之前使用該標記。

這種情況下,要想使用[Bindable]標記必須為屬性同時定義setter和getter方法。如果只是定義了一個setter方法,那么你就創建了一個“只寫”屬性,這樣的屬性不能作為Flex數據綁定表達式的源。如果只定義getter方法,那么就創建了一個“只讀”屬性,把只讀屬性當作Flex數據綁定源而不插入[Bindable]標記,就如同使用了一個用const關鍵字定義的變量來作為Flex數據綁定表達式的源。(這樣的綁定源只能在應用啟動時觸發綁定一次,以后就不會再觸發)。

這個標記可以由下面的形式定義:
 

  1. [Bindable]  
  2. publicfunctionsetshortNames(val:Boolean):void{  
  3. ...  
  4. }  
  5. publicfunctiongetshortNames():Boolean{  
  6. ...  
  7. }  

Flex編譯器自動為這個屬性產生一個名為propertyChange,類型為PropertyChangeEvent的事件。如果屬性值在寫入的時候保持不變,Flex不會發出事件或者更新屬性。為了確定屬性是否變化,Flex調用getter方法來獲取屬性的當前值。

也可以為事件指定名稱,如下例所示:
 

  1. [Bindable(event="changeShortNames")]  
  2. publicfunctionsetshortNames(val:Boolean):void{  
  3. ...  
  4. //Createanddispatchevent.  
  5. dispatchEvent(newEvent("changeShortNames"));  
  6. }  
  7. //Getmethod.  
  8. publicfunctiongetshortNames():Boolean{  
  9. ...  
  10. }  

 

這種情況下,開發者要負責生成和發出事件。通常是在setter方法中完成這個工作。
并且Flex不會檢查舊值和新值是否不同。盡管在類的級別上指定了[Bindable]標記,如果想要為事件命名,仍然可以在[Bindable]中包含指定名稱的事件。

下面的代碼使以變量形式定義的maxFontSize和minFontSize屬性可以作為Flex數據綁定的源:
 

  1. //Definepublicvarsfortrackingfontsize.  
  2. [Bindable]  
  3. publicvarmaxFontSize:Number=15;  
  4. [Bindable]  
  5. publicvarminFontSize:Number=5;  

 在下面的例子中,使setter和getter方法形式定義的public屬性成為Flex數據綁定的源。
[Bindable]元數據標記中引入了屬性變化時由setter方法發出的事件:
 

  1. //Defineprivatevariable.  
  2. privatevar_maxFontSize:Number=15;  
  3. [Bindable(event="maxFontSizeChanged")]  
  4. //Definepublicgettermethod.  
  5. publicfunctiongetmaxFontSize():Number{  
  6. return_maxFontSize;  
  7. }  
  8. //Definepublicsettermethod.  
  9. publicfunctionsetmaxFontSize(value:Number):void{  
  10. if(value<=30){  
  11. _maxFontSize=value;  
  12. }else_maxFontSize=30;  
  13. //Createeventobject.  
  14. vareventObj:Event=newEvent("maxFontSizeChanged");  
  15. dispatchEvent(eventObj);  
  16. }  

 在這個例子中,setter更新了屬性的值,然后創建并發出了一個事件來激發對Flex數據綁定目的屬性的更新。
在MXML文件中,通過在<mx:Metadata>塊中引入[Bindable]元數據標記,就可以將所有以變量形式定義的public屬性成為Flex數據綁定的源,例子如下:
 

  1. <mx:Metadata> 
  2. [Bindable]  
  3. </mx:Metadata> 


在<mx:Script>塊中也可以在使用[Bindable]元數據標記使單個的變量形式定義的屬性成為Flex數據綁定表達式的源。另外,也可以對setter及getter方法定義的屬性使用[Bindable]元數據標記,使之成為Flex數據綁定表達式的源。#p#

◆將只讀屬性作為Flex數據綁定的源

使用getter方法而沒有setter就可以自動定義一個只讀屬性作為Flex數據綁定表達式的源。
Flex只在應用啟動時執行一次Flex數據綁定。因為來自于只讀屬性的Flex數據綁定只在應用啟動時發生一次,所以可以對只讀屬性省略[Bindable]元數據標記。

◆用靜態屬性作為Flex數據綁定源

可以將靜態屬性作為Flex數據綁定表達式的源,Flex在應用啟動時執行一次Flex數據綁定,然后在靜態屬性發生變化的時候再執行Flex數據綁定。
可以將靜態常量自動作為Flex數據綁定表達式的源,Flex只在應用啟動時執行一次Flex數據綁定。因為Flex數據綁定只在應用啟東時發生一次,所以可以對靜態常量省略[Bindable]元數據標記。下面例子使用靜態常量作為Flex數據綁定表達式的源。 

  1. <?xmlversionxmlversion="1.0"?> 
  2. <!--binding/StaticBinding.mxml--> 
  3. <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"> 
  4. <mx:Script> 
  5. <![CDATA[  
  6. //Thissyntaxcasuesacompilererror.  
  7. //[Bindable]  
  8. //publicstaticvarvarString:String="Astaticvar.";  
  9. publicstaticconstconstString:String="Astaticconst.";  
  10. ]]> 
  11. </mx:Script> 
  12. <!--Thisbindingoccursonceatapplicationstartup.--> 
  13. <mx:Buttonlabelmx:Buttonlabel="{constString}"/> 
  14. </mx:Application> 
  15.  

 ◆使用可綁定屬性鏈進行工作

當指定一個屬性作為Flex數據綁定表達式的源時,Flex不僅監控這個屬性的變化,也會監控這個由這個屬性作為開始點的屬性鏈的變化。整個屬性鏈,包括源屬性,被稱為“可綁定的屬性鏈”。在下面的例子中,firstName.text是一個可綁定的屬性鏈:
<mx:Textid="myText"text="{firstName.text}"/>
開發者可以使用很長的屬性鏈,如下例所示:
 

  1. <mx:Textidmx:Textid="myText"text="{user.name.firstName.text}"/> 


只有當text屬性是可綁定的,Flex數據綁定機制才能檢查text屬性的變化。但是,如果在運行時,想要向屬性鏈中的部分屬性賦予新值,那么屬性鏈中的每個屬性都必須是可綁定的,才能使Flex數據綁定機制起作用。否則,在運行時更改user,name或者firstName屬性會導致Flex數據綁定機制無法檢查text屬性的變化。

在使用BindingUtils.bindProperty()或者BindingUtils.bindSetter()方法時,可以將可綁定的屬性鏈作為方法的參數,例如,bindProperty()方法有以下的聲明:
publicstaticfunctionbindProperty(site:Object,prop:String,host:Object,chain:Object,commitOnly:Boolean=false):ChangeWatcherHost和chain屬性指定了Flex數據綁定表達式的源。使用bindProperty()方法可以定義一個Flex數據綁定表達式,如下:
 

  1. bindProperty(myText,'text',user,["name","firstName","text"]); 

這個例子中,["name","firstName","text"]定義了相對于user對象的可綁定屬性鏈。注意,在本例中,user不是可綁定屬性鏈的一部分。

在MXMLFlex數據綁定表達式中,可綁定屬性連總是相對于this。因此,要想定義一個同上面的MXML等價的Flex數據綁定表達式,應按如下例子使用bindProperty()方法:
bindProperty(myText,'text',this,["user","name","firstName","text"]);
 

【編輯推薦】

  1. 學習筆記 如何將對象用于Flex數據綁定
  2. Flex數據綁定中綁定到函數、對象和數組
  3. 術語匯編 Flex數據綁定概述
  4. 解析Flex全屏模式設置方法
  5. Flex內存泄露解決方法和內存釋放優化原則

 

 

責任編輯:佚名 來源: myspace.com
相關推薦

2010-07-30 10:30:58

Flex數據綁定

2010-07-28 13:54:42

Flex數據綁定

2010-08-13 15:08:55

Flex數據訪問

2010-07-28 13:48:49

Flex數據綁定

2010-07-30 10:53:53

Flex數據綁定

2010-08-11 14:09:07

Flex3.0數據綁定

2020-12-28 10:35:38

前端數據技術

2010-08-09 15:09:27

Flex數據訪問

2021-09-01 10:37:25

鴻蒙HarmonyOS應用

2010-07-30 09:16:24

Flex數據綁定

2013-06-17 17:08:47

Windows PhoWP開發共享數據方式

2010-07-29 09:56:45

Flex數據庫

2017-07-14 15:07:23

2015-01-16 17:41:45

數據中心模塊化

2010-08-03 09:20:33

Flex讀取XML配置

2018-04-08 09:31:57

大數據

2010-07-28 13:31:10

Flex數據綁定

2021-11-26 11:07:14

cowsay命令Linux

2010-07-28 13:11:13

Flex數據綁定

2012-07-17 09:16:16

SpringSSH
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久黄色精品视频 | 欧美一级二级三级视频 | 欧美日韩专区 | 久久精品免费观看 | 欧美一级片在线观看 | 奇米av| 亚洲成av人片在线观看无码 | www.一区二区三区 | 在线观看亚洲 | 最新国产精品精品视频 | 国产高清久久 | 黄色片在线看 | 日韩免费一区二区 | 精品国产一区二区三区久久久蜜月 | 国产精品久久久久久久久久 | 福利视频一区 | 亚洲一区二区三区在线免费 | 9191av| 就操在线 | 欧美乱大交xxxxx另类电影 | 偷拍自拍在线观看 | 久久久久国产一级毛片高清网站 | 久99久视频| 中文字幕一区二区三区四区 | 天天插天天狠天天透 | 欧美一级视频在线观看 | 欧美一区二区三区在线看 | 亚洲视频一区在线观看 | 亚洲精品欧美精品 | 久久亚洲精品视频 | 国产精品久久精品 | 色妹子综合网 | 在线免费观看a级片 | 免费一级做a爰片久久毛片潮喷 | 欧美白人做受xxxx视频 | 亚洲成人一区 | 精品成人| 欧美日韩国产精品激情在线播放 | 亚州综合在线 | 国产1区在线 | 国产精品入口麻豆www |