我从来没有真正理解绑定的意义,除了它是 addeventlistener 的有效简写。
还有更多吗?我错过了什么吗?
谢谢,dsdsdsdsd
我从来没有真正理解绑定的意义,除了它是 addeventlistener 的有效简写。
还有更多吗?我错过了什么吗?
谢谢,dsdsdsdsd
Flex 4 中的数据绑定 我猜想可以将其描述为 addEventListener() 的快捷方式——但这有点像说汽车只是步行的快捷方式。如果您只是绕着块走,没什么大不了的 - 但是如果您正在构建一个复杂的应用程序,其中包含大量项目渲染器和大量数据点,这些数据点可能会随时变化,数据绑定可以让您避免编写数百个 addEventListener () 和 removeEventListener() 调用,以及它们相关的处理程序。在这种情况下,这确实是一件大事。
数据绑定就是以声明方式定义数据在 UI 中的显示方式。在底层,它有点复杂,因为除了 hooking 之外,还有更多的需求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);
双向绑定使事情变得更加复杂。