`

深入分析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图片上传实例

    在本篇文章中,我们将深入探讨一个具体的Flex图片上传实例,并对其中涉及的关键技术点进行详细解读。此实例不仅提供了一个实际的上传图片的应用场景,而且还包含了一些实用的代码片段,这对于想要了解如何在Flex中...

    FLEX动态树 动态图表

    ### FLEX动态树与动态图表:深入理解及应用 在Adobe Flex框架中,`Tree`控件被广泛用于展示层次结构的数据,如目录、组织结构等。本文将深入解析如何在Flex中创建并自定义动态树,以及如何通过事件处理实现更高级的...

    FLEX 数据绑定专题一(转)

    本文将深入探讨“FLEX数据绑定”这一专题,它是一种强大的机制,允许视图与模型之间的自动同步,使得开发者能够更加专注于业务逻辑而不是繁琐的同步操作。本文是系列文章的第一部分,主要介绍数据绑定的基本概念、...

    flex [bindadle]标签数据绑定经典案例

    让我们深入分析这段代码: 1. **初始化阶段**:`initHandler()`函数在应用启动时调用,将`_fruits`数组设置为下拉列表`fruitCB`的数据提供者,这使得下拉列表可以显示数组中的各个水果名称。 2. **属性与方法**:`...

    Flex读取excel

    本文将深入探讨如何使用Flex进行Excel文件的读取与写入操作,并基于提供的代码片段进行详细的分析。 #### 二、基础知识 1. **Flex概述**: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 实时曲线图(定时获取后台数据)

    通过上述分析,我们了解到这个Flex实时曲线图的核心实现是利用`setInterval`定时器不断向`ArrayCollection`数据集合中添加新生成的数据,并通过`mx:LineChart`组件将这些数据可视化展示出来。这种方式简单而有效,...

    flex 第一步的bug

    这些修正不仅有助于新手避免学习过程中的误区,还能帮助他们更深入地理解Flex的各项技术细节。通过仔细研究这些修正内容,学习者可以更快地掌握Flex的基本概念和技术要点,为后续的项目开发打下坚实的基础。

    Flex初级数据绑定代码

    通过分析HelloWorld2.mxml文件,我们将深入了解Flex中的数据绑定机制及其基本用法。 #### 二、Flex与数据绑定 Flex是一种用于构建跨平台富互联网应用(RIA)的软件框架,支持多种编程语言和技术栈。数据绑定是Flex的...

    flex创建的字体属性框

    通过上述分析,我们不仅了解了如何在Flex中创建字体属性框,还深入探讨了MXML与ActionScript的结合使用、数据绑定机制以及如何利用UI组件来实现字体属性的动态设置。这对于理解和开发类似的Flex应用程序非常有帮助。

    flex文件中使用html渲染文字等.txt

    在本篇内容中,我们将深入探讨如何在Flex文件中利用HTML来渲染文本,并结合实例代码进行解析。通过本文,读者可以全面了解Flex框架下HTML文本渲染的方法与应用场景,以及如何结合Flex组件完成多媒体控制功能。 ### ...

    flex部分控件代码

    ### Flex代码分析 #### 1. **XML声明与命名空间定义** 在代码最开始的部分,我们看到的是XML文档声明和命名空间定义: ```xml xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe....

    log及相关日志

    通过记录和分析日志,开发者能够深入了解程序的运行状况,这对于及时发现并解决问题至关重要。日志可以分为静态日志分析、代码跟踪调试以及动态监测分析三种形式,其中静态日志分析是最基础且常用的日志处理方式之一...

    OpenScales图层控制 DataGrid checkBox

    ### OpenScales图层控制与...通过对示例代码的分析,我们不仅了解了如何设置和配置这些组件,还深入探讨了如何解决实际应用中可能遇到的问题,如保持复选框状态不变等。希望本文能帮助您更好地理解并应用于您的项目中。

    AdaptiveUIPlayground:该示例演示如何使用Xamarin.Forms创建自适应UI

    1. **布局控件**: Xamarin.Forms 提供了几种布局选项,如 StackLayout、Grid、RelativeLayout 和 FlexLayout。这些布局可以根据屏幕大小自动调整内容的排列方式。例如,StackLayout 可以按垂直或水平堆叠子元素,而 ...

Global site tag (gtag.js) - Google Analytics