[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}” 当您使用符号 {} 时,您正在告诉编译器执行以下操作:
如果使用较短的形式 [Bindable] ,并且将标记添加到属性/ var之前,则编译器将填充空格并添加一些其他功能以使属性可绑定(bind)。本质上,您是在告诉编译器“添加使该属性可绑定(bind)所需的事件和方法”
现在,考虑编译器将在后台执行的操作的方法是这样。
本质上,编译器将为您完成很多工作。
[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对时,只需要将其应用于一个或另一个,它将同时应用于两个。通常,您应该在 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类。