【发布时间】:2011-04-26 22:48:12
【问题描述】:
[Bindable]
/**
* Display output of video device.
*/
public var videoLocal : Video;
有人知道吗?
【问题讨论】:
标签: actionscript
[Bindable]
/**
* Display output of video device.
*/
public var videoLocal : Video;
有人知道吗?
【问题讨论】:
标签: actionscript
[Bindable] 是您可以在 flex ActionScript 代码中使用的多个元标记之一。它可以应用于在任何范围内标记的属性或方法。它不能与静态类成员一起使用。
使用 [Bindable] 元标记的关键是了解使用它时的幕后情况。本质上,使用数据绑定是一种用于添加事件侦听器和调度事件的简写。
[Bindable] 标签有两种基本形式。第一个只是 [Bindable] 后跟一个 var/property 声明。第二个是 [Bindable(event="eventname")] 后跟 var/property 声明、函数/方法声明或 getter/setter 声明的一半。
我将首先解释较长的符号,因为另一个符号建立在相同的概念上,但更简写。
当您使用 [Bindable(event="eventname")] 时,您实际上是在告诉编译器此 var/property/function/method(称为实例成员)是“可用的”用作数据绑定的来源。您还告诉它,当实例成员的值已失效/更改并且需要重新读取时,“eventname”事件将被调度。
在这个更长的形式中,这就是你所做的一切。每当需要在绑定订阅者中更新值时,开发人员负责实际调度“eventname”事件。
使用数据绑定的真正效率在于订阅方面。您将在 MXML 中看到的典型符号是 value="{instance.propertyName}" 当您使用符号 { } 时,您是在告诉编译器执行以下操作:
如果您使用较短的形式 [Bindable],并且在属性/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 类。
【讨论】:
作为 Justin 所说的补充,您实际上可以在 Flex 中使用 @ 字符两种方式进行数据绑定。这是一个例子:
<s:TextInput id="txt1" text="@{txt2.text}" />
有关启用源代码的工作示例,您可以查看我不久前写的这篇文章:
【讨论】:
它用于与 Flex 的数据绑定,您可以在此处阅读更多信息
http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2.html
创建属性以用作数据绑定的源
当您创建一个属性时,您 想用作数据源 绑定表达式,Flex可以 自动复制的值 源属性到任何目的地 属性当源属性 变化。向 Flex 发出信号以执行 副本,您必须使用 [Bindable] 用于注册属性的数据标签 弹性。
【讨论】: