当前位置:  开发笔记 > 编程语言 > 正文

动作中的[Bindable]意味着什么?

如何解决《动作中的[Bindable]意味着什么?》经验,为你挑选了1个好方法。

[Bindable]是您可以在flex ActionScript代码中使用的几个元标记之一.它可以应用于在任何范围内标记的属性或方法.它不能与静态类成员一起使用.

使用[Bindable]元标记的关键是了解使用它时引擎盖下发生了什么.基本上使用数据绑定是一种添加事件侦听器和调度事件的简写.

[Bindable]标签有两种基本形式.第一个是[Bindable],后面是var/property声明.第二个是[Bindable(event ="eventname")], 后跟var/property声明,函数/方法声明或getter/setter声明的一半.

我将首先解释较长的符号,因为其他符号构建在相同的概念上,但更简洁.

当你使用[Bindable(event ="eventname")]时,你实际上告诉编译器这个var/property/function /方法(称之为实例成员)是'available'可以用作数据绑定的源.您还告诉它,当实例成员的值被无效/更改并且需要重新读取时,将调度"eventname"事件.
在这个更长的形式中,这就是你所做的一切.只要需要在绑定订阅者中更新值,开发人员就负责实际调度"eventname"事件.

使用数据绑定的真正效率来自订阅方.您将在MXML中看到的典型符号是value ="{instance.propertyName}" 当您使用符号{}时,您告诉编译器执行以下操作:

    创建一个事件侦听器,侦听可绑定元标记中指定的事件

    在该事件中,侦听器重新读取instance.propertyName并更新此值

如果使用较短的形式[Bindable],并在属性/ var之前添加标记,则编译器会填充空白并添加一些其他功能以使属性可绑定.基本上你是在告诉编译器"添加使这个属性可绑定所需的事件和方法"
现在,想一想编译器将在底层做什么的方法是这样的.

    制作var的私有版本

    创建一个"事件"来触发绑定

    使用原始var的范围和名称创建一个getter函数,该函数在调用时返回var的私有版本.

    创建一个setter函数,其中包含原始var的作用域和名称,用于在调用AND时调度var的私有版本并调度触发事件.

从本质上讲,编译器将为您完成大部分工作.

    [Bindable]
    public var xyz

相当于

    private var _xyz:String;

    [Bindable(event="updateXYZValue")]
    public function get xyz():String{
        return _xyz;
    }

    public function set xyz(newxyz:String):void{
        _xyz = newxyz;
        dispatchEvent(new Event("updateXYZValue"));
    }

这些中唯一的功能差异在于第一种情况;

    您不知道将调度以触发绑定的事件的名称

    没有触发数据绑定就无法更新基础值

第二个例子还演示了[Bindable]元标记的一个特例.这是当你将它应用于为同一变量名定义的getter/setter对时,你只需要将它应用于其中一个,它将适用于两者.通常你应该在getter上设置它.

您可以在函数/方法上使用任一符号,但是如果您未指定事件,则永远不会触发绑定,因此如果您尝试绑定到函数,则应始终指定事件.也可以通过堆叠标签来指定多个触发事件.例如.

    [Bindable(event="metaDataChanged")]
    [Bindable(event="metaObjectUpdated")]
    public function readMyMetaData():MetaDataObject{
        var myMetaDataObject:MetaDataObject;
            .
            .
            .

        return myMetaDataObject;
    }

这将假设您希望触发绑定时,您将在其他任何地方调度此metaDataChanged事件或metaObjectUpdated事件.

另请注意,使用此表示法,您可以将任何实例成员的绑定绑定到实例将分派的任何事件.即使你自己也没有生成的继承事件,如FrameEnter,OnChange等......

还可以在运行时设置和销毁数据绑定.如果您对此感兴趣,请查看mx.binding.utils类.



1> Justin Ohms..:

[Bindable]是您可以在flex ActionScript代码中使用的几个元标记之一.它可以应用于在任何范围内标记的属性或方法.它不能与静态类成员一起使用.

使用[Bindable]元标记的关键是了解使用它时引擎盖下发生了什么.基本上使用数据绑定是一种添加事件侦听器和调度事件的简写.

[Bindable]标签有两种基本形式.第一个是[Bindable],后面是var/property声明.第二个是[Bindable(event ="eventname")], 后跟var/property声明,函数/方法声明或getter/setter声明的一半.

我将首先解释较长的符号,因为其他符号构建在相同的概念上,但更简洁.

当你使用[Bindable(event ="eventname")]时,你实际上告诉编译器这个var/property/function /方法(称之为实例成员)是'available'可以用作数据绑定的源.您还告诉它,当实例成员的值被无效/更改并且需要重新读取时,将调度"eventname"事件.
在这个更长的形式中,这就是你所做的一切.只要需要在绑定订阅者中更新值,开发人员就负责实际调度"eventname"事件.

使用数据绑定的真正效率来自订阅方.您将在MXML中看到的典型符号是value ="{instance.propertyName}" 当您使用符号{}时,您告诉编译器执行以下操作:

    创建一个事件侦听器,侦听可绑定元标记中指定的事件

    在该事件中,侦听器重新读取instance.propertyName并更新此值

如果使用较短的形式[Bindable],并在属性/ var之前添加标记,则编译器会填充空白并添加一些其他功能以使属性可绑定.基本上你是在告诉编译器"添加使这个属性可绑定所需的事件和方法"
现在,想一想编译器将在底层做什么的方法是这样的.

    制作var的私有版本

    创建一个"事件"来触发绑定

    使用原始var的范围和名称创建一个getter函数,该函数在调用时返回var的私有版本.

    创建一个setter函数,其中包含原始var的作用域和名称,用于在调用AND时调度var的私有版本并调度触发事件.

从本质上讲,编译器将为您完成大部分工作.

    [Bindable]
    public var xyz

相当于

    private var _xyz:String;

    [Bindable(event="updateXYZValue")]
    public function get xyz():String{
        return _xyz;
    }

    public function set xyz(newxyz:String):void{
        _xyz = newxyz;
        dispatchEvent(new Event("updateXYZValue"));
    }

这些中唯一的功能差异在于第一种情况;

    您不知道将调度以触发绑定的事件的名称

    没有触发数据绑定就无法更新基础值

第二个例子还演示了[Bindable]元标记的一个特例.这是当你将它应用于为同一变量名定义的getter/setter对时,你只需要将它应用于其中一个,它将适用于两者.通常你应该在getter上设置它.

您可以在函数/方法上使用任一符号,但是如果您未指定事件,则永远不会触发绑定,因此如果您尝试绑定到函数,则应始终指定事件.也可以通过堆叠标签来指定多个触发事件.例如.

    [Bindable(event="metaDataChanged")]
    [Bindable(event="metaObjectUpdated")]
    public function readMyMetaData():MetaDataObject{
        var myMetaDataObject:MetaDataObject;
            .
            .
            .

        return myMetaDataObject;
    }

这将假设您希望触发绑定时,您将在其他任何地方调度此metaDataChanged事件或metaObjectUpdated事件.

另请注意,使用此表示法,您可以将任何实例成员的绑定绑定到实例将分派的任何事件.即使你自己也没有生成的继承事件,如FrameEnter,OnChange等......

还可以在运行时设置和销毁数据绑定.如果您对此感兴趣,请查看mx.binding.utils类.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有