[可绑定]是您可以在 Flex ActionScript 代码中使用的几个元标记之一。它可以应用于在任何范围内标记的属性或方法。它不能与静态类成员一起使用。
使用的关键是[可绑定]元标记是了解当您使用它时幕后发生的事情。本质上,使用数据绑定是添加事件侦听器和分派事件的一种速记方式。
有两种基本形式[可绑定]标签。第一个只是[可绑定]接下来是 var/property 声明。第二个是[可绑定(事件=“事件名称”)]后跟 var/property 声明、函数/方法声明或 getter/setter 声明的一半。
我将首先解释较长的符号,因为另一个符号基于相同的概念,但具有更多的简写。
当你使用[可绑定(事件=“事件名称”)]您本质上是在告诉编译器此 var/property/function/method(称为实例成员)“可”用作数据绑定的源。您还告诉它,当实例成员的值已失效/更改并且需要重新读取时,将调度“eventname”事件。
在这个较长的形式中,这就是您所做的一切。每当绑定订阅者中的值需要更新时,开发人员负责实际调度“eventname”事件。
使用数据绑定的真正效率来自于订阅方。您在 MXML 中看到的典型符号是值=“{instance.propertyName}”当您使用符号时{ }您告诉编译器执行以下操作:
- 创建一个事件监听器,监听可绑定元标记中指定的事件
- 在该事件监听器中重新读取instance.propertyName并更新该值
如果您使用较短的形式[可绑定],并且您在 property/var 之前添加标记,编译器会填充空白并添加一些附加功能以使属性可绑定。本质上你是在告诉编译器“添加使该属性可绑定所需的事件和方法”
现在思考编译器在幕后将做什么的方法是这样的。
- 制作你的 var 的私有版本
- 创建一个“事件”来触发绑定
- 创建一个具有原始 var 的范围和名称的 getter 函数,该函数在调用时返回 var 的私有版本。
- 使用原始 var 的范围和名称创建一个 setter 函数,该函数在调用时设置 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"));
}
其中唯一的功能差异是首先;
- 您不知道将调度以触发绑定的事件的名称
- 无法更新基础值without触发数据绑定
第二个示例还演示了一个特殊情况[可绑定]元标记。也就是说,当您将其应用于为同一变量名定义的 getter/setter 对时,您只需将其应用于其中一个或另一个,它将同时应用于两者。通常您应该将其设置在 getter 上。
您可以在函数/方法上使用任一表示法,但是如果您不指定事件,则永远不会触发绑定,因此如果您尝试绑定到函数,则应始终指定事件。还可以通过堆叠标签来指定多个触发事件。例如。
[Bindable(event="metaDataChanged")]
[Bindable(event="metaObjectUpdated")]
public function readMyMetaData():MetaDataObject{
var myMetaDataObject:MetaDataObject;
.
.
.
return myMetaDataObject;
}
这假设你的班级的其他地方你会派发这个元数据改变事件或元对象更新当您想要触发绑定时发生事件。
另请注意,使用此表示法,您可以将任何实例成员的绑定绑定到该实例将分派的任何事件。甚至继承了您自己不生成的事件,例如 FrameEnter、OnChange 等......
数据绑定也可以在运行时设置和销毁。如果您对此感兴趣,请查看 mx.binding.utils 类。