Flex 4雙向數據綁定

Flex 4雙向數據綁定

 

雙向數據 綁定是Flex新特性之一,而且相當實用。很多時候我需要將一個數據模型綁定到一個表單上,同時又希望表單的任何改變都能夠反過來影響數據模型。藉助雙向數據綁定,只需要在同一代碼 行處定義綁定,而並不需要其它額外的代碼。



以下是雙向數據綁定的兩條語法定義

<s:TextInput id=”txt” text=”@{value}”/> 注意@字符,這個操作符是用來標識綁定的類型是雙向綁定。

<fx:Binding destination=”txt.text” source=”value” twoWay=”true”/>注意 twoWay屬性

然而,需要注意有時候它並不能像預期那樣完成任務,讓我們看一個例子:





  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex /spark"
  3.   xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768" creationComplete="init()">
  4.     <fx:Script>
  5.       <![CDATA[
  6.           [Bindable]
  7.          private var labelValue:String = "Hello World!";
  8.           private function init():void {
  9.             trace(labelValue);
  10.             trace(txt.text);
  11.           }
  12.         ]]>
  13.    </fx:Script>
  14.      <s:TextInput id="txt" text="@{labelValue}"/>
  15. </s:Application>


複製代碼

設定一個字符類型的變量,爲它賦值"Hello World",這個變量是文本輸入框文本的數據綁定源。你可以認爲執行init()後會得到如下結果:





  1.    1: Hello World!
  2.    2: Hello World!


複製代碼

事實上,輸出爲空!當我第一次運行代碼時感到很困惑。然後我調用調試器去觀察幕後程序 是如何運行的。



這是我發現的:

1.程序初始化

2.首先LabelValue變量被初始化,出發屬性觀察器(因爲它被使用了綁定)

3.這時,文本輸入域爲空,綁定無法完成

4.接下來,初始化文本輸入框

5.默認情況下,輸入框的文本爲空

6.因爲文本輸入框也是數據綁定的一部分(謹記此例中數據綁定是雙向的),屬性檢查器執行並設置labelValue值爲空

7.最後,程序完成創建過程,init()被執行,這時,變量和文本輸入框的文本屬性獲得相同值,都爲空



如果我希望代碼按照預期的想法正常運行,我必須在creationComplete事件 或之後初始化labelValue變量:




  1. private function init():void {
  2.    labelValue = "Hello Wold!";
  3. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章