[Bindable]
/**
* Display output of video device.
*/
public var videoLocal : Video;
Run Code Online (Sandbox Code Playgroud)
有谁知道?
Jus*_*hms 68
[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}" 当您使用符号{}时,您告诉编译器执行以下操作:
如果使用较短的形式[Bindable],并在属性/ var之前添加标记,则编译器会填充空白并添加一些其他功能以使属性可绑定.基本上你是在告诉编译器"添加使这个属性可绑定所需的事件和方法"
现在,想一想编译器将在底层做什么的方法是这样的.
从本质上讲,编译器将为您完成大部分工作.
[Bindable]
public var xyz
Run Code Online (Sandbox Code Playgroud)
相当于
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"));
}
Run Code Online (Sandbox Code Playgroud)
这些中唯一的功能差异在于第一种情况;
第二个例子还演示了[Bindable]元标记的一个特例.这是当你将它应用于为同一变量名定义的getter/setter对时,你只需要将它应用于其中一个,它将适用于两者.通常你应该在getter上设置它.
您可以在函数/方法上使用任一符号,但是如果您未指定事件,则永远不会触发绑定,因此如果您尝试绑定到函数,则应始终指定事件.也可以通过堆叠标签来指定多个触发事件.例如.
[Bindable(event="metaDataChanged")]
[Bindable(event="metaObjectUpdated")]
public function readMyMetaData():MetaDataObject{
var myMetaDataObject:MetaDataObject;
.
.
.
return myMetaDataObject;
}
Run Code Online (Sandbox Code Playgroud)
这将假设您希望触发绑定时,您将在其他任何地方调度此metaDataChanged事件或metaObjectUpdated事件.
另请注意,使用此表示法,您可以将任何实例成员的绑定绑定到实例将分派的任何事件.即使你自己也没有生成的继承事件,如FrameEnter,OnChange等......
还可以在运行时设置和销毁数据绑定.如果您对此感兴趣,请查看mx.binding.utils类.
它用于 Flex 的数据绑定,您可以在此处阅读更多相关信息
http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2.html
创建用作数据绑定源的属性
当您创建要用作数据绑定表达式源的属性时,当源属性发生更改时,Flex 可以自动将源属性的值复制到任何目标属性。要向 Flex 发出信号以执行复制,必须使用 [Bindable] 数据标签向 Flex 注册属性。