2011-05-09 157 views

回答

4

數據綁定全是關於聲明性地定義數據在UI中的顯示方式。在引擎蓋下,它有點複雜,因爲有更多的需求,而不僅僅是掛鉤addEventListener來支持數據綁定的功能。

這是一個非常強大的功能,實際上,並更瞭解它,我們可以在一個簡單的「Hello World」應用看:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark"> 
    <s:HGroup> 
     <s:TextInput id="input" /> 
     <s:Label text="Hello {input.text}" /> 
    </s:HGroup> 

</s:Application> 

現在,編譯這個程序與--keep編譯器標誌,並期待在新文件夾「bin-debug/generated」中。我們感興趣的是HelloWorld-generated.as

這裏是該綁定被定義並呼籲從構造:

private function _HelloWorld_bindingsSetup():Array 
{ 
    var result:Array = []; 

    result[0] = new mx.binding.Binding(this, 
     function():String 
     { 
      var result:* = "Hello " + (input.text); 
      return (result == undefined ? null : String(result)); 
     }, 
     null, 
     "_HelloWorld_Label1.text" 
     ); 


    return result; 
} 

稍後,在HelloWorld的構造函數,你會得到一個呼叫建立觀察家:

 _watcherSetupUtil.setup(this, 
       function(propertyName:String):* { return target[propertyName]; }, 
       function(propertyName:String):* { return HelloWorld[propertyName]; }, 
       bindings, 
       watchers); 

這真的只是做到這一點:

watchers[0] = new mx.binding.PropertyWatcher("input", 
              { propertyChange: true }, 
              [ bindings[0] ] , 
              propertyGetter); 
watchers[1] = new mx.binding.PropertyWatcher("text", 
              { change: true, 
               textChanged: true }, 
              [ bindings[0] ], 
              null); 

氏ngs通過雙向綁定變得更加複雜。

+0

+1用於在通過綁定完成的生成的ActionScript中添加。 – JeffryHouser 2011-05-10 01:27:38

+0

很好的答案,謝謝你的加入! – Myk 2011-05-10 14:43:16

4

數據Flex 4中結合可以我猜想被描述爲使用addEventListener()的快捷方式 - 但是這是一個有點像說,汽車只是散步的快捷方式。如果你只是繞着這個區域走,沒有什麼大不了的 - 但是如果你正在構建一個複雜的應用程序,其中包含許多項目渲染器和大量數據點,這些數據點可能會隨時發生變化,數據綁定可以避免編寫數百個addEventListener ()和removeEventListener()調用以及它們相關的處理程序。在這種情況下,這是一件非常重要的事情。

+0

同意。數據綁定在正確使用時非常強大且富有表現力。它將數據的顯示保持在您期望的位置:顯示它的UI元素的位置。它大大減少了你的代碼,並允許你從你的UI中分離你的數據。我大量使用這個功能,因爲它是框架最好的部分之一,IMO。 – 2011-05-10 00:15:09

+0

我也是+1。綁定可以非常強大。我的一個小心是避免過度使用綁定。綁定經常被濫用,並可能導致性能問題,特別是在itemRenderer中。我通過重寫渲染器不使用綁定來解決Flextras客戶端的大量內存問題。例如,沒有一個Flex框架組件使用Binding。這是有原因的。 – JeffryHouser 2011-05-10 01:26:23

+0

@ www.Flextras.com即使這樣,我也不會說應該避免在項目渲染器中綁定數據(你也不是建議這麼做)。我始終在項目渲染器中使用數據綁定,並且從來沒有出現過性能問題。這就是說,我相信他們可以存在。特別是在移動時。這是一個「瞭解你的工具並作出有教育的決定」的例子。對於每個人都會使用的組件(像您的組件),避免數據綁定意義重大。你不知道你的組件將如何使用。但是,在50件事情和1件約束事件的清單中,它通常很好。 – 2011-05-10 10:07:10