`

深入分析Flex [Bindable](转)

    博客分类:
  • Flex
阅读更多

      使用数据绑定时,Flex 会自动把一个对象的数据复制,提供给另一个对象使用,提供数据一方称为数据源对象,使用数据的一方称为目标对象。当数据源对象的数据发生变化时,目标对象的数据会自动更新。

      实质上,绑定的实现也是借助事件机制来完成的,当目标使用了数据绑定,目标对象就会侦听数据源的某一个固定事件。如果数据源改变,就派发事件,通知目标对象更新最新数据。当然这个过程都是由Flex来完成。

      作为绑定的数据源对象,必须支持绑定--对象有派发改变事件的能力。

      使用数据绑定的多数情况:

      1、将后台数据(通过Web Service 或 Remoting 方式得到的数据)绑定给控件

      2、把控件数据绑定给后台通信对象,发送给后台服务端

      3、后台返回数据和数据模型 进行绑定

      4、组件或对象属性的数据绑定

      绑定方式

      将数据源对象房子大括号{}中,作为目标对象的值就可以了。

          backgroundColor="{mColor.value.toString()}"
      在{}中也可以使用AS:
          text="{(Number(age_txt.text)>= 16)?'成年':'未成年'}"

      也可以使用函数:
          scaleX="{doResize(scale)}" 

      使用[Bindable]来实现绑定功能,[Bindable]是元标签的一种,专门用来定义绑定中的数据源对象,event事件名指当前数据源发生变化时,数据源所在对象派发的事件类型,可选的,默认:propertyChange :
      [Bindable]
      [Bindabl(event="eventname")]
      比如我们定义scale:
      [Bindable]
      private var scale:Number = 1;

      使用<mx:Binding> 标签来定义数据绑定:
      <mx:Binding source="users.user.blogURL" destination="pic.toolTip" />
      其中source指定数据源,destination指定目标对象的属性,两者的数据类型必须相同

 

      举例:给下面的public变量加上[Bindable]

      [Bindable] 

      public var name:String = "";

 

      作为一个public变量,肯定既可以被赋值,也能赋值给别的变量。绑定的作用就是,当name改变的时候(被赋值了),可能通知其它被name影响(赋值给它们)的变量发生改变。这里的“可能”就需要编译器来判断,这就是为什么元数据是给编译器用的原因了。在mxml里用{}的语法的地方就是绑定的对象,比如label={xxx.name},当name变化,label也跟着变化。这样,我们只是很简单的改变了name的值,由于有绑定,界面上的label也跟着自动变化了。

      Bindable使用地方

      三个地方:类, 变量, getter/setter。是不是public没有关系,private的就只能给自家用呗。用在Class上就是简单的给所有的public属性(包括变量,getter/setter,普通方法)加上[Bindable],可是一般的方法不能用[Bindable],于是一般就能看到flex给了个warning,直接无视。变量就是上面讲的,很简单略掉。

      用在只读,只写属性(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 ; i<content.length ; i++) 

      { 

      _w += content[i] + "\r\n"; 

      } 

      return _w; 

      } 

      }

      原来的设想是content绑定_wholeText,可它是不工作的。为什么?_wholeText太复杂了,被编译器排除在“可能”之外,编译器认为没有绑定关系,如果只是简单的return content,倒是可以的。

 

分享到:
评论

相关推荐

    Flex Bindable 的用法

    什么是元数据(metadata):[Bindable]大概又是Flex用得最多的元数据了。

    Flex企业应用开发实战源代码

    2.4.5 使用Bindable元数据标记 40 2.4.6 绑定到函数、对象和数组 43 2.4.7 使用可绑定属性链进行工作 46 2.5 Flex中的组件化编程 46 2.5.1 认识Flex组件和组件容器 47 2.5.2 组件生命周期与布局 51 2.5.3 组件...

    FLEX企业应用开发实战.part1

     2.4.5 使用Bindable元数据标记  2.4.6 绑定到函数、对象和数组  2.4.7 使用可绑定属性链进行工作  2.5 Flex中的组件化编程  2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的...

    FLEX企业应用开发实战.part2

     2.4.5 使用Bindable元数据标记  2.4.6 绑定到函数、对象和数组  2.4.7 使用可绑定属性链进行工作  2.5 Flex中的组件化编程  2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的...

    flex导出excel的代码

    [Bindable] private var dp:Array = [ {idx:1, names: "test1", sex: "b" }, {idx:2, names: "test2", sex: "g" } ]; public function doSelect(o:Object):void { Alert.show("行的数据分别是...

    双向数据绑定JS库Bindable.js.zip

    Bindable.js 实现了灵活、快速的双向数据绑定的 JavaScript 库。 Two-way data binding means linking properties of two separate objects - when one changes, the other will automatically update with that ...

    Flex调用xml通过DataGrid遍历简单示例

    [Bindable] private var slides:ArrayCollection private function resultHandler(event:ResultEvent):void { slides = event.result.album.slide; } private function faultHandler...

    bindable:使用Aurelia JS内置的设计系统,可以更快,更轻松地进行Web开发

    Bindable是一个设计系统,旨在在工具中提供视频产品,以构建紧密一致的界面。 Bindable将为设计者和工程师提供一种通用的模式。 Bindable是作为插件开发的,并使用构建。 目录 背景 我们是由设计师和工程师组成的...

    flex 绑定元数据

    算是flex初学者的的笔记吧,首先可以概览一下下文中的代码,然后我们主要是看看[Bindable]的这种用法。

    flex实列demo

    *" creationComplete="initTree();... change="iFrame.source=tree.selectedNode.path" /&gt; ... // TODO: determine whether we can ... // TODO: add some links here to Flex sites } ]]&gt; &lt;/mx:Application&gt;

    AngularJS基础 ng-non-bindable 指令详细介绍

    本文主要讲解AngularJS ng-non-bindable 指令,这里帮大家整理了ng-non-bindable指令的基本知识资料,有需要的小伙伴可以参考下

    flexjava交互

    [Bindable] var result:String; function sendRequest(){ var name=name1.text; var password=password1.text; ro.validateLogin(name,password); ro.addEventListener(ResultEvent.RESULT,results); } function ...

    bindable-object.js:数据绑定对象

    var BindableObject = require ( "bindable-object" ) ; var person = new BindableObject ( { name : "craig" , last : "condon" , location : { city : "San Francisco" } } ) ; person . bind ( "location....

    bindable-component:公开用于绑定处理程序的可扩展的react组件

    安装npm install --save bindable-component用法import { BindableComponent } from 'bindable-component' ;// Aternatively// import { BaseComponent } from 'bindable-component';class MyComponent extends ...

    Bindables:Bindables将您的自动属性转换为Wpf依赖项或附加属性

    的外接程序,用于将常规属性转换为Dependency或Attached属性。 Bindables将您的自动属性转换为Wpf依赖项或附加属性。 此外,它允许您设置以下选项: 指定默认值。 指定FrameworkPropertyMetadataOptions 。...

    open flash chart 2 swc包

    open flash chart 2 的swc文件包 可以在flex里面调用了. [Bindable] private var chart:String='{ "elements": [ { "type": "bar","alpha":0.8,"colour":"#663366", "values": [ 0 ] } ], "title": { "text": "...

    aurelia-typed-observable-plugin:Aurelia的可观察和可绑定装饰器的增强实现。

    提供4个基本的自定义可观察对象: @observable.date , @observable.number , @observable.string , @observable.boolean ,5个@bindable以及额外的内置值: @bindable.booleanAttr @bindable 安装与提醒 npm i ...

    backbone.marionette.bindable-router:带有木偶可绑定参数的路由器

    木偶的可绑定路径参数此路由器允许您使用前导@char 绑定控制器方法以路由参数。 路由器示例: appRoutes: { 'users/@user/edit' : 'onUserEdit' , 'users/@user/copy' : 'onUserCopy' , '*default' : 'onDefault' } ...

Global site tag (gtag.js) - Google Analytics