回答
数据绑定全是关于声明性地定义数据在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通过双向绑定变得更加复杂。
数据Flex 4中结合可以我猜想被描述为使用addEventListener()的快捷方式 - 但是这是一个有点像说,汽车只是散步的快捷方式。如果你只是绕着这个区域走,没有什么大不了的 - 但是如果你正在构建一个复杂的应用程序,其中包含许多项目渲染器和大量数据点,这些数据点可能会随时发生变化,数据绑定可以避免编写数百个addEventListener ()和removeEventListener()调用以及它们相关的处理程序。在这种情况下,这是一件非常重要的事情。
同意。数据绑定在正确使用时非常强大且富有表现力。它将数据的显示保持在您期望的位置:显示它的UI元素的位置。它大大减少了你的代码,并允许你从你的UI中分离你的数据。我大量使用这个功能,因为它是框架最好的部分之一,IMO。 – 2011-05-10 00:15:09
我也是+1。绑定可以非常强大。我的一个小心是避免过度使用绑定。绑定经常被滥用,并可能导致性能问题,特别是在itemRenderer中。我通过重写渲染器不使用绑定来解决Flextras客户端的大量内存问题。例如,没有一个Flex框架组件使用Binding。这是有原因的。 – JeffryHouser 2011-05-10 01:26:23
@ www.Flextras.com即使这样,我也不会说应该避免在项目渲染器中绑定数据(你也不是建议这么做)。我始终在项目渲染器中使用数据绑定,并且从来没有出现过性能问题。这就是说,我相信他们可以存在。特别是在移动时。这是一个“了解你的工具并作出有教育的决定”的例子。对于每个人都会使用的组件(像您的组件),避免数据绑定意义重大。你不知道你的组件将如何使用。但是,在50件事情和1件约束事件的清单中,它通常很好。 – 2011-05-10 10:07:10
- 1. Java Eclipse - 简单快捷方式
- 2. 菜单快捷方式
- 3. 菜单项快捷方式
- 4. 什么是简单合并文件的最快捷方式,什么是分割数组的最快捷方式?
- 5. 有没有一种简单快捷的方式来生成JavaScript?
- 6. 使用CMD.exe中的简单命令创建快捷方式
- 7. 将ICommand绑定到MenuItem并指定快捷方式
- 8. 绑定命令调色板命令的快捷方式?
- 9. 创建批处理和快捷方式的快捷方式
- 10. WiX快捷方式覆盖现有的同名快捷方式
- 11. Qt - 删除快捷方式 - 模糊的快捷方式超载
- 12. Python快捷方式
- 13. Wpf快捷键绑定
- 14. VB.NET Winforms菜单项快捷方式覆盖默认快捷方式?
- 15. NetBeans快捷方式的确定列表
- 16. 的JavaScript - 快捷方式,它被定义
- 17. Atom:PHP定义的快捷方式
- 18. 如何将多个操作绑定到快捷方式
- 19. 快捷方式在Silverlight和默认浏览器快捷方式
- 20. eclipse C++单元测试快捷方式
- 21. ActiveRecord中的快捷方式?
- 22. Clojure:when-let的快捷方式
- 23. ComputerName中的快捷方式
- 24. 条件的快捷方式
- 25. Android的快捷方式
- 26. 用户定义的页面菜单的Windows快捷方式
- 27. Default Vs自定义快捷方式
- 28. 快捷方式URL重定向
- 29. 自定义Mathematica快捷方式
- 30. 简单快捷的实现在C#
+1用于在通过绑定完成的生成的ActionScript中添加。 – JeffryHouser 2011-05-10 01:27:38
很好的答案,谢谢你的加入! – Myk 2011-05-10 14:43:16