2010-10-18 136 views

回答

2

它在數據綁定使用Flex中,你可以閱讀更多關於它在這裏

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2.html

創建屬性當您創建一個屬性來作爲源使用數據綁定

那你想使用 作爲數據源 綁定表達式,Flex可以 自動將 源屬性的值複製到任何目標 屬性當源屬性 更改。要向Flex發送信號以執行 複製,您必須使用[Bindable] 數據標記來註冊屬性爲 Flex。

+0

如何做類似的工作,而不撓? – ollydbg 2010-10-18 13:28:42

+1

@ollydbg我在回答這個問題的底部簡單回答了您的評論/問題。簡而言之,不使用mxml,您可以使用** mx.binding.utils **包直接在actionscript中創建和修改綁定。 – 2011-03-15 21:08:09

66

[Bindable]是您可以在Flex ActionScript代碼中使用的幾個元標記之一。它可以應用於任何範圍內標記的屬性或方法。它不能用於靜態類成員。

使用[Bindable] meta標籤的關鍵是瞭解使用它時引擎蓋下的情況。本質上使用數據綁定是一種用於添加事件偵聽器和分派事件的簡寫形式。

[Bindable]標籤有兩種基本形式。第一個是[Bindable]後跟一個var/property聲明。第二個是[Bindable(event =「eventname」)]後跟一個var/property聲明,一個函數/方法聲明或getter/setter聲明的一半。

我會解釋更長的記法,因爲另一個基於相同的概念,但速度更快。

當你使用[Bindable(event =「eventname」)]你基本上告訴編譯器這個var/property/function /方法(稱爲這個實例成員)是'available'用作數據綁定的來源。您還告訴它,當實例成員的值已被無效/更改時,需要重新讀取「eventname」事件將被分派。
在這個更長的形式,這一切你在做什麼。只要值需要在綁定訂戶中更新,開發人員就負責實際分派「eventname」事件。

使用數據綁定的真正效率來自訂閱方。典型的符號,你會在MXML看到的是值=「{} instance.propertyName」當您使用符號{}你告訴編譯器執行以下操作:

  1. 創建一個事件偵聽器監聽可綁定元標記中指定的事件
  2. 在該事件中,偵聽器重新讀取實例。如果您用簡短形式[綁定] propertyName的和更新該值

,你一個屬性/ VAR前添加標籤,編譯器填補了空白,並增加了部分附加功能,使屬性可綁定。從本質上講,你是在告訴編譯器「添加你需要這個屬性綁定的事件和方法」
我們想起了什麼,編譯器會做引擎蓋下是這樣的方式。

  1. 讓你的VAR的私人版本
  2. 創建一個「事件」觸發結合
  3. 創建您返回變種的私人VERSON原變種的範圍和名稱的getter函數調用時。
  4. 創建一個setter函數,其中包含原始var的範圍和名稱,該函數在調用AND時調度var的私有版本並調度觸發事件。

本質編譯器會做很多爲你工作。

[Bindable] 
    public var xyz 

相當於

private var _xyz:String; 

    [Bindable(event="updateXYZValue")] 
    public function get xyz():String{ 
     return _xyz; 
    } 

    public function set xyz(newxyz:String):void{ 
     _xyz = newxyz; 
     dispatchEvent(new Event("updateXYZValue")); 
    } 

在這些唯一的功能差異是,在第一個實例;

  1. 你不知道的結合

這第二個將被分派到觸發綁定

  • 沒有辦法更新基礎值沒有觸發數據事件的名稱示例還演示了一個特殊情況的[Bindable]元標記。這就是說,當你將它應用到爲同一個變量名定義的getter/setter對時,只需要將它應用於其中一個或另一個,它將應用於兩者。通常你應該把它設置在吸氣劑上。

    您可以使用函數/任意方法但是符號,如果你不指定事件將永遠不會被觸發,所以如果你正在試圖綁定到一個函數,你應該送花兒給人指定事件的結合。也可以通過堆疊標籤來指定多個觸發事件。例如。

    [Bindable(event="metaDataChanged")] 
        [Bindable(event="metaObjectUpdated")] 
        public function readMyMetaData():MetaDataObject{ 
         var myMetaDataObject:MetaDataObject; 
          . 
          . 
          . 
    
         return myMetaDataObject; 
        } 
    

    這假定別的你的地方你的類,你會分派此metaDataChanged事件或metaObjectUpdated事件,當你想觸發綁定。

    也要注意,使用這個符號可以配合任何實例成員的結合的任何事件的情況下將出動。即使是繼承的事件,你自己也不如FrameEnter,的OnChange等產生...

    數據綁定,也可以安裝和運行過程中被破壞。如果您對此感興趣,請查看mx.binding.utils類。

  • +0

    檢查Mihai的答案[下](http://stackoverflow.com/a/19729201/2530736)雙向綁定 – Vanlalhriata 2014-04-08 14:53:41

    1

    作爲補充什麼賈斯汀說,你實際上可以使用兩種方法數據的Flex與@具有約束性。這裏有一個例子:

    <s:TextInput id="txt1" text="@{txt2.text}" /> 
    

    對於源代碼的工作示例啓用你可以看看這篇文章,我寫了一段時間後:

    Two-ways data binding in Flex