绑定简单addeventlistener的快捷方式

时间:2011-05-09 23:44:23

标签: flash flex actionscript bindable metatag

我从来没有真正理解绑定点,除了它是addeventlistener的有效简写。

还有更多吗?我错过了什么吗?

感谢, dsdsdsdsd

2 个答案:

答案 0 :(得分:4)

Flex 4中的数据绑定可能会被描述为addEventListener()的快捷方式 - 但这有点像说汽车只是行走的捷径。如果你只是围绕这个区域,没什么大不了的 - 但是如果你正在构建一个复杂的应用程序,其中包含大量的项目渲染器和许多数据点,这些数据点可能会随时发生变化,数据绑定可以避免编写数百个addEventListener ()和removeEventListener()调用,以及它们相关的处理程序。在这种情况下,这是一个非常重要的事情。

答案 1 :(得分: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);

双向绑定会使事情变得更加复杂。