2011-05-09 80 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