[转]Flex中[Bindable]的用法


   什么是元数据(metadata):[Bindable]大概又是Flex用得最多的元数据了。我就按自己的理解随便解释一下:首先要明白元数据不是语法的一部分,而是专门给编译器用的
  ,说白了是告诉编译器做某些事情,学过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也跟着自动变化了,爽吧。
  能用在哪里?三个地方:类, 变量。
  1、getter/setter。是不是public没有关系,private的就只能给自家用呗。
  2、Class。就是简单的给类所有的public属性(包括变量,getter/setter,普通方法)加上 [Bindable],可是一般的方法不能用[Bindable]呀,于是一般就能看到flex给了
  个warning,直接无视。变量嘛就是上面讲的,很简单略掉。
  3、用在只读,只写属性(getter/setter)上面。终于讲到关键地方了,因为getter和setter很像方法,用起来会有点不同。看看这个例子:
  [Bindable]
  private var content:Array = new Array();
  [Bindable]
  public function set _content(ct:String):void
  {
  content = ct.split(SEP);
  }
  [Bindable]              
  public function get _wholeText():String
  {
  if(content.length == 0)
  {
  return "";
  }
  else
  {
  var _w:String = "";
  for(var i:int=0 ; iArray = new Array();
  [Bindable]
  public function set _content(ct:String):void
  {
  content = ct.split(SEP);
  this.dispatchEvent(new Event("_contectChanged"));
  }
  [Bindable("_contectChanged")]              
  public function get _wholeText():String
  {
  if(content.length == 0)
  {
  return "";
  }
  else
  {
  var _w:String = "";
  for(var i:int=0 ; iflex为用户隐藏了很多底层算法。

猜你喜欢

转载自vrzd62vrzd.iteye.com/blog/1573029
今日推荐