Flex中的绑定无疑是很好用的。
Flex为我们提供了多种使用数据绑定的方式,归纳起来通常有以下几种:
- {}绑定实现
- <Binding />标记绑定实现
- 应用BindingUtil类绑定实现
- ChangeWacher绑定实现
- [Bindable]元标签绑定实现
- 双向绑定
双向绑定
<s:TextInput id="txtInputA" text="{txtInputB.text}"/>
<s:TextInput id="txtInputB" text="{txtInputA.text}"/>
//仅需在绑定符号{}外加上@符号即可
<s:TextInput id="txtInputB" text="@{txtInputA.text}"/>
//在<Binding/>标签中指定twoWay为true即
<fx:Binding source="txtInputA.text" destination="txtInputB.text" twoWay="true"/>
需要注意的是:
1. style或effect属性不能使用双向绑定
2. 当使用RemoteOject、WebService或HTTPServer时,作为通信传递的参数值不能使用双向绑定。
mx.binding.utils.BindingUtils.bindProperty(site:Object, prop:String, host:Object, chain:Object, commitOnly:Boolean=false, useWeakReference:Boolean=false):ChangeWatcher
site
Object 上的 prop
)绑定到可绑定属性或属性链。如果已成功创建 ChangeWatcher 实例,则 prop
将初始化为 chain
的当前值。
-
参数:
-
site 定义绑定到
chain
的属性的 Object。 -
prop 在要绑定的
site
Object 中定义的公用属性的名称。当chain
值更改时,该属性将接收chain
的当前值。 -
host 用于承载要监视的属性或属性链的对象。
主机
维护当prop
更改时要更新的站点
列表。 -
chain 用于指定要监视的属性或属性链的值。合法值包括:
- 包含宿主对象公用可绑定属性名称的字符串。
- 以下格式的 Object:
{ name: 属性名, getter: function(host) { return host[property name] } }
。此 Object 必须包含宿主对象的公用可绑定属性的名称和用于该属性的 getter 函数。 - 包含前两个选项的组合的非空 Array,该数组表示可从宿主访问的可绑定属性链。例如,要绑定属性
host.a.b.c
,需按以下形式调用该方法:bindProperty(site, prop, host, ["a","b","c"])
。
请注意:在
chain
参数中命名的属性必须是公用属性,因为describeType()
方法抑制非公用属性的所有相关信息,包括 ChangeWatcher 在查找为给定属性公开的 change 事件时扫描的可绑定元数据。但是,在使用上述{ name, getter }
参数形式时提供的 getter 函数可用于将任意计算值与指定的(公用)属性关联。 -
commitOnly 如果仅在提交 change 事件时需要调用处理函数,则设置为
true
;如果无论是否提交 change 事件都调用处理函数,则设置为false
。请注意:属性是否存在不提交的 change 事件由[NonCommittingChangeEvent(<event-name>)]
元数据标记来指示。通常,这些标记用于指示细化值更改,例如确认前在文本字段中进行的修改。 -
useWeakReference 确定对
站点
的引用是强还是弱。强引用(默认值)可防止站点
被当作垃圾回收。弱引用则没有此作用。对于 Flex 4,已进行了添加。
返回:
-
如果已为
chain
参数指定了至少一个属性名称,则返回 ChangeWatcher 实例;否则返回 null。
mx.binding.utils.BindingUtils.bindSetter(setter:Function, host:Object, chain:Object, commitOnly:Boolean=false, useWeakReference:Boolean=false):ChangeWatcher
-
将 setter 函数(
-
setter
chain
的当前值更改时使用该值的参数进行调用的 Setter 方法。 -
host 属性的宿主。有关详细信息,请参阅
bindProperty()
方法。主机
维护当prop
更改时要更新的setter
列表。 -
chain 属性或属性链的名称。有关详细信息,请参阅
bindProperty()
方法。 -
commitOnly 如果应仅在提交 change 事件时调用处理函数,则设置为
true
。有关详细信息,请参阅bindProperty()
方法。 -
useWeakReference 确定对
setter
的引用是强还是弱。强引用(默认值)可防止setter
被当作垃圾回收。弱引用则没有此作用。对于 Flex 4,已进行了添加。
返回:
-
如果已为
chain
参数指定了至少一个属性名称,则返回 ChangeWatcher 实例;否则返回 null。
setter
)绑定到可绑定属性或属性链。如果成功创建了一个 ChangeWatcher 实例,则会调用 setter 函数。setter 必须具有以下函数签名:
function mySetterFunction(object:Object):void { //Do whatever you want with the value of the bound property. }
其中,object
包含 chain
的当前值。
-
参数:
mx.binding.utils.ChangeWatcher.watch(host:Object, chain:Object, handler:Function, commitOnly:Boolean=false, useWeakReference:Boolean=false):ChangeWatcher
-
创建并启动 ChangeWatcher 实例。一个 ChangeWatcher 实例可观察一个属性或一个属性链。属性链是可从宿主对象访问的一系列属性。例如,表达式
-
host 用于承载要监视的属性或属性链的对象。创建 ChangeWatcher 实例后,您可以使用
reset()
方法更改host
参数的值。主机
维护当prop
更改时要调用的处理函数
列表。 -
chain 用于指定要监视的属性或属性链的值。合法值包括:
- 包含宿主对象公用可绑定属性名称的 String。
- 以下格式的 Object:
{ name: 属性名, getter: function(host) { return host[name] } }
。此 Object 包含一个公用可绑定属性的名称以及一个充当该属性的 getter 的函数。 - 包含前两种选项的任意组合的非空 Array。这代表可从宿主访问的可绑定属性链。例如,要观察属性
host.a.b.c
,需按以下形式调用此方法:watch(host, ["a","b","c"], ...)
。
请注意:在
chain
参数中命名的属性必须是公用属性,因为describeType()
方法抑制非公用属性的所有相关信息,包括 ChangeWatcher 在查找为给定属性公开的 change 事件时扫描的可绑定元数据。但是,在使用上述{ name, getter }
参数形式时提供的 getter 函数可用于将任意计算值与指定的(公用)属性关联。 -
handler 在修改观察属性(或观察链中任何属性)的值时调用的事件处理函数。如果观察器链中的任何宿主对象分派了在该宿主对象的
[Bindable]
元数据标记中为相应的观察属性指定的事件,则表明已经修改。默认事件名为propertyChange
。由可绑定属性分派的事件对象将传递到此处理函数,不会进行任何修改。默认情况下,Flex 将分派 PropertyChangeEvent 类型的事件对象。然而,在使用
[Bindable]
元数据标记定义可绑定属性时,您可以定义自己的事件类型。 -
commitOnly 如果仅在提交 change 事件时需要调用处理函数,则设置为
true
;如果无论是否提交 change 事件都调用处理函数,则设置为false
。请注意:属性是否存在不提交的 change 事件由[NonCommittingChangeEvent(<event-name>)]
元数据标记来指示。通常,这些标记用于指示细化值更改,例如确认前在文本字段中进行的修改。 -
useWeakReference (default = false) 确定对
处理函数
的引用是强还是弱。强引用(默认值)可防止处理函数
被当作垃圾回收。弱引用则没有此作用。
返回:
-
如果已为
chain
参数至少指定了一个属性名称,则返回 ChangeWatcher 实例;否则返回 null。请注意,不能保证返回的监视程序已成功发现 change 事件并将自身附加到 change 事件,因为宿主可能没有在给定的属性或属性链上公开任何事件。您可以使用isWatching()
方法来确定观察器的状态。
obj.a.b.c
中包含属性链 (a, b, c)。
-
参数: