总结一下Flex中的一般的数据绑定的几种实现方法。
首先先讲一下啥叫绑定呢?说白了就是把两个或几个东西绑在一起,一个变化的时候其他的也得跟着他变。这就产生了动态的效果了。
1、用“{}”来进行绑定
如果希望双向绑定的话,可以这样
在“{}”这中间,可以计算表达式、连接字符串、条件表达式、函数,反正大概就是可以一句话写下的代码都可以。、
连接字符串不用“+”,直接写在后面
如
2、用标签
如果希望双向绑定的话,标签中有个 twoWay 属性,可以设置true或false来选择单向的还是双向的。
3、使用ActionScript来进行数据绑定
使用类mx.binding.utils.BindingUtils来创建mx.binding.utils.ChangeWatcher对象
有两个方法,bindProperty 将公用属性(site Object 上的 prop)绑定到可绑定属性
bindSetter 将setter 函数(setter)绑定到可绑定属性
4、[Bindable]元数据标签
[Bindable]大概又是Flex用得最多的元数据了。刚开始用用确实好简单,效率真是没的说。不过这几天用着却碰到了些问题,我自己搜集了些资料,想着有必要在blog里总结一下吧。
啥是元数据(metadata)
首先要明白元数据不是语法的一部分,而是专门给编译器用的,说白了是告诉编译器做某些事情,学过java之类的应该知道。那Bindable来讲,它的作用是告诉 flex编译器,给某些某些东西建立绑定关系,flex编译器会在编译过程中给AS(flex编译器就是把mxml编译成as,再编译到swf,也可能直接编译倒swf,我这里假设有as这么个环节)加一点事件发生和处理之类的代码,由此绑定的关系便建立了,如果我们用纯粹as3代码来写也是可以实现的,就是太麻烦。
啥是绑定
知道继续跳过。举个例子:给下面的public变量加上[Bindable]
[Bindable]
public var name:String = "";
作为一个public变量,肯定既可以被赋值,也能赋值给别的变量。绑定的作用就是,当name改变的时候(被赋值了),可能通知其它被name影响(赋值给它们)的变量发生改变。这里的“可能”就需要编译器来判断,这就是为什么元数据是给编译器用的原因了。在mxml里用{}的语法的地方就是绑定的对象,比如label={xxx.name},当name变化,label也跟着变化。这样,我们只是很简单的改变了name的值,由于有绑定,界面上的 label也跟着自动变化了,爽吧。