数据绑定

6 篇文章 0 订阅
3 篇文章 0 订阅

Flex中的绑定无疑是很好用的。

Flex为我们提供了多种使用数据绑定的方式,归纳起来通常有以下几种:

  1. {}绑定实现
  2. <Binding />标记绑定实现
  3. 应用BindingUtil类绑定实现
  4. ChangeWacher绑定实现
  5. [Bindable]元标签绑定实现
  6. 双向绑定

[Bindable]的完整形式为[Bindable(event=”propertyChange”)],实际上我们简写为[Bindable] 默认指的是当“propertyChange”事件产生时会触发绑定功能应用,其中“propertyChange”事件的派发是由Flex编译为我们自 动生成的代码去完成的(在项目属性中的Flex编译参数中添加 -keep 参数)
存在内存泄露问题。

双向绑定

<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。
BindingUtils.bindProperty()方法参数的顺序,需要绑定的目标对象及属性在前,而源对象及属性在后。

mx.binding.utils.BindingUtils.bindSetter(setter:Function, host:Object, chain:Object, commitOnly:Boolean=false, useWeakReference:Boolean=false):ChangeWatcher
将 setter 函数( setter)绑定到可绑定属性或属性链。如果成功创建了一个 ChangeWatcher 实例,则会调用 setter 函数。setter 必须具有以下函数签名:
      function mySetterFunction(object:Object):void {
          //Do whatever you want with the value of the bound property.
      }

其中,object 包含 chain 的当前值。

参数:
setter chain 的当前值更改时使用该值的参数进行调用的 Setter 方法。
host 属性的宿主。有关详细信息,请参阅 bindProperty() 方法。 主机维护当 prop 更改时要更新的 setter 列表。
chain 属性或属性链的名称。有关详细信息,请参阅 bindProperty() 方法。
commitOnly 如果应仅在提交 change 事件时调用处理函数,则设置为 true。有关详细信息,请参阅 bindProperty() 方法。
useWeakReference 确定对 setter 的引用是强还是弱。强引用(默认值)可防止 setter 被当作垃圾回收。弱引用则没有此作用。对于 Flex 4,已进行了添加。
返回:
如果已为 chain 参数指定了至少一个属性名称,则返回 ChangeWatcher 实例;否则返回 null。
BindingUtils.bindSetter()方法指定当绑定源的属性发生改变时去执行指定的函数。

mx.binding.utils.ChangeWatcher.watch(host:Object, chain:Object, handler:Function, commitOnly:Boolean=false, useWeakReference:Boolean=false):ChangeWatcher
创建并启动 ChangeWatcher 实例。一个 ChangeWatcher 实例可观察一个属性或一个属性链。属性链是可从宿主对象访问的一系列属性。例如,表达式 obj.a.b.c 中包含属性链 (a, b, c)。
参数:
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() 方法来确定观察器的状态。

ChangeWatcher.watcher()方法的返回值为ChangeWatcher实例,当我们需要停止绑定时,需手动调用unwatch()来解除绑定,以避免带来内存泄漏的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值