[Bindable]
/**
* Display output of video device.
*/
public var videoLocal : Video;

有谁知道?

最佳答案

[可绑定(bind)] 是可在Flex ActionScript代码中使用的几个元标记之一。它可以应用于在任何范围内标记的属性或方法。不能与静态类成员一起使用。

使用 [Bindable] 元标记的关键是了解使用它时幕后的情况。本质上,使用数据绑定(bind)是添加事件侦听器和调度事件的一种简写形式。

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

我将首先解释较长的符号,因为其他符号基于相同的概念,但缩写更多。

当您使用 [Bindable(event =“eventname”)] 时,您实际上是在告诉编译器该var / property / function / method(称其为实例成员)可以用作数据绑定(bind)的源。您还告诉它,当实例成员的值已无效/已更改并且需要重新读取时,将分派(dispatch)“eventname”事件。
以这种较长的形式,您正在做的所有事情。开发人员负责在需要在绑定(bind)订户中更新值时实际调度“eventname”事件。

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

  • 创建一个事件侦听器,侦听可绑定(bind)元标记
  • 中命名的事件
  • 在那种情况下,侦听器重新读取instance.propertyName并更新此值

  • 如果使用较短的形式 [Bindable] ,并且将标记添加到属性/ var之前,则编译器将填充空格并添加一些其他功能以使属性可绑定(bind)。本质上,您是在告诉编译器“添加使该属性可绑定(bind)所需的事件和方法”
    现在,考虑编译器将在后台执行的操作的方法是这样。
  • 私有(private)化您的var
  • 版本
  • 创建一个“事件”以触发绑定(bind)
  • 使用原始var的作用域和名称创建一个getter函数,该函数将在调用时返回var的私有(private)版本。
  • 用原始var的作用域和名称创建一个setter函数,该函数在调用AND调度触发事件时设置var的私有(private)版本。

  • 本质上,编译器将为您完成很多工作。
        [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"));
        }
    

    在这些功能上唯一的区别是首先。
  • 您不知道将被调度以触发绑定(bind)
  • 的事件的名称
  • 在不触发数据绑定(bind)
  • 的情况下无法更新基础值

    第二个示例还演示了 [Bindable] 元标记的一种特殊情况。这是当您将其应用于为相同变量名定义的getter / setter对时,只需要将其应用于一个或另一个,它将同时应用于两个。通常,您应该在 setter/getter 上设置它。

    您可以在函数/方法上使用任一种表示法,但是,如果未指定事件,则绑定(bind)将永远不会触发,因此,如果您尝试绑定(bind)到函数,则应始终指定事件。也可以通过堆叠标签来指定多个触发事件。例如。
        [Bindable(event="metaDataChanged")]
        [Bindable(event="metaObjectUpdated")]
        public function readMyMetaData():MetaDataObject{
            var myMetaDataObject:MetaDataObject;
                .
                .
                .
    
            return myMetaDataObject;
        }
    

    这将假定您要在类中其他地方触发绑定(bind)时调度此metaDataChanged事件或metaObjectUpdated事件。

    还要注意,使用这种表示法,您可以将任何实例成员的绑定(bind)绑定(bind)到实例将调度的任何事件。甚至您自己不会生成的继承事件,例如FrameEnter,OnChange等。

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

    09-27 11:10
    查看更多