`
hereson
  • 浏览: 1444556 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

关于数据绑定(译自Flex帮助)

    博客分类:
  • flex
阅读更多

数据绑定是将一个对象中的数据同另一个对象中的数据联系在一起的过程。数据绑定为在应用的不同层之间传递数据提供了便捷方法。数据绑定需要一个源属性,一个目的属性,以及用于表明何时将数据从源属性拷贝到目的属性触发事件。当源属性变化时,对象发出触发事件

Adobe Flex提供三种方法用于指定数据绑定:MXML中的大括号({})语法,MXML中的<mx:Binding>标记,以及ActionScript中的BindingUtils的系列方法。下面的例子使用大括号({})语法来展示一个Text控件,该控件的数据来自于TextInput控件Text属性:

<?xml version="1.0"?>

<!-- binding/BasicBinding.mxml -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:TextInput id="myTI" text="Enter text here"/>

    <mx:Text id="myText" text="{myTI.text}"/>

</mx:Application>

大括号中所括的属性名就是绑定表达式中的源属性。当源属性的值放生变化时,Flex源属性myTI.text的当前值拷贝到目的属性

   数据绑定表达式中可以将ActionScript代码以及E4X表达式作为一部分包含进来,如下例所示:

<?xml version="1.0"?>

<!-- binding/BasicBindingWithAS.mxml -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:TextInput id="myTI"/>

    <mx:Text id="myText" text="{myTI.text.toUpperCase()}"/>

</mx:Application>

在这个例子中,当Flex源属性的数据拷贝到目的属性时,使用ActionScriptString.toUpperCase()方法将源属性中的文本转化为大写形式。关于更多的信息参看:在数据绑定中使用ActionScript以及在数据绑定中使用E4X表达式。

     可以用<mx:Binding>标记作为大括号语法的替代方法。在使用<mx:Binding>时,要为<mx:Binding>标记提供一个源属性作为标记的source属性以及提供一个目的属性作为标记的destination属性。下面的例子使用<mx:Binding>标记定义了一个从TextInput控件到Text控件的数据绑定:

<?xml version="1.0"?>

<!-- binding/BasicBindingMXML.mxml -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:TextInput id="myTI"/>

    <mx:Text id="myText"/>  

    <mx:Binding source="myTI.text" destination="myText.text"/>

</mx:Application>

     同大括号语法相比,用<mx:Binding>标记能够将视图(用户界面)同模型完全分离。<mx:Binding>标记也能实现将多个源属性绑定到一个相同的目的属性,这是因为能够定义多个具有相同的destination属性的<mx:Binding>标记。例子请参照“绑定多个源属性到一个目的属性”。

  大括号语法和<mx:Binding>标记都能在编译期定义数据绑定,而使用ActionScript代码则可以在运行期定义数据绑定,如下例所示:

<?xml version="1.0"?>

<!-- binding/BasicBindingAS.mxml -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

   

    <mx:Script>

      <![CDATA[

        import mx.binding.utils.*;

 

        // Define data binding.

        public function initBindingHandler():void {

            BindingUtils.bindProperty(myText, "text", myTI, "text");

        }

      ]]>   

    </mx:Script>

 

    <mx:TextInput id="myTI"/>

    <mx:Text id="myText" preinitialize="initBindingHandler();"/>

</mx:Application>

 

在这个例子中,使用静态方法BindingUtils.bindProperty()来定义数据绑定,也可以使用BindingUtils.bindSetter()方法定义一个到函数的绑定。有关更多的信息,参见“在ActionScript定义数据绑定”。

注意,在这个例中使用preinitialize事件去定义数据绑定。这是必须的,因为Flex在应用启动过程中,当源对象发出initialize事件时触发所有的数据绑定,有关更详细的信息参照“数据绑定何时发生”。

数据绑定何时发生?

数据绑定发生在以下情况:

<!--[if !supportLists]-->1.   <!--[endif]-->由于源已经被改变,数据绑定源发出一个事件,这个事件可以在应用执行的任何时间发出。这个事件触发Flex将源属性的值拷贝到目的属性。

<!--[if !supportLists]-->2.   <!--[endif]-->在应用启动过程中,当源对象发出initialize事件时,所有数据绑定都被一次性地被触发以初始化目的属性。

  要想监控数据绑定,可以定义一个绑定观察者在数据绑定发生时触发事件处理器。更多信息请参照“定义绑定观察者”。
UIComponent
类的
executeBindings()方法执行该UIComponent作为目的对象上的所有绑定。所有的容器和控件,以及Repeater组件都从UIComponent类继承。容器和Repeater类的executeChildBindings()方法执行其中作为目的对象的子对象上的所有绑定。所有的容器都从Container类继承。

  这些方法在期望的绑定没有发生时提供了一种执行绑定的方法。通过增加一条代码,比如对executeChildBindings()方法的调用,就可以在完成一个变化而没有使绑定执行的时候来更新用户界面。但是只有在确保绑定没有自动发生时才能使用executeBindings()方法。

支持数据绑定的属性

   可以把对象的所有属性都作为数据绑定表达式的目的属性,但要想使一个属性成为数据绑定表达式的源,那么源对象必须被实现为支持数据绑定。这意味着这个对象在属性值发生变化时要发出一个事件以触发绑定。在本文中,可以被用来作为数据绑定源的属性被称为“可绑定的(bindable)”属性。

  在Adobe Flex Language Reference可以被当作绑定表达式的源的属性包括以下的描述语句:

"This property can be used as the source for data binding."

关于创建可以被用数据绑定表达式源的属性的更多信息参见“创建用作数据绑定源的属性”。

使用只读属性作为数据绑定源

  通过定义一个只有getter方法而没有setter方法来定义个一个只读属性作为数据绑定表达式的源时,Flex只在应用启动时执行一次数据绑定。

使用静态属性作为数据绑定源

  可以自动用一个静态常量作为数据绑定表达式的源。Flex只在应用启动时执行一次数据绑定。

创建用作数据绑定源的属性

  当创建一个用于绑定表达式源的属性,那么在源属性值发生变化时Flex就能自动将值拷贝到所有的目的属性。为了让Flex执行拷贝,必须使用[Bindable]标记来向Flex注册这个属性。

The [Bindable] 元数据标记有以下语法:

[Bindable]

[Bindable(event="eventname")]

 

  如果忽略了事件名称,Flex自动地创建一个名为propertyChange的事件,并且在属性发生变化时,由Flex发出这个事件以触发所有以这个属性作为源的数据绑定。

  如果你指定了事件名称,那么在源属性发生变化时你就要自己负责发出这个事件。关于更多有关[Bindable]元数据标记的信息和例子参见“使用Bindable元数据标记”。下面的例子作了一个maxFontSize属性和一个minFontSize属性变量可用于数据绑定表达式的源:

<?xml version="1.0"?>

<!-- binding/FontPropertyBinding.mxml -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

   

    <mx:Script>

        <![CDATA[

            // Define public vars for tracking font size.

            [Bindable]

            public var maxFontSize:Number = 15;

 

            [Bindable]

            public var minFontSize:Number = 5;

        ]]>   

    </mx:Script>

   

    <mx:Text text="{maxFontSize}"/>

    <mx:Text text="{minFontSize}"/>

 

    <mx:Button click="maxFontSize=20; minFontSize=10;"/>

</mx:Application>

 

  当点击Button按钮,就会更新maxFontSizeminFontSize属性,并且触发了数据绑定去更新文本控件。

注意:如果忽略的[Bindable]元数据标记,Flex编译器会发出一个警告语句来说明绑定机制没有检查那个属性的变化。
数据绑定的用途:

数据绑定通常包括以下用途:

<!--[if !supportLists]-->§  <!--[endif]-->将用户界面上的控件属性绑定到另外一个用界面控件上。

<!--[if !supportLists]-->§  <!--[endif]-->将用户界面上的控件属性绑定到中间层的数据模型,以及将那个数据模型上域(field)绑定到数据服务请求上(一个三层系统)

<!--[if !supportLists]-->§  <!--[endif]-->将用户界面上的控件属性绑定到数据服务请求。

<!--[if !supportLists]-->§  <!--[endif]-->将数据服务请求结果绑定到用户界面控件的属性上。

<!--[if !supportLists]-->§  <!--[endif]-->将数据请求服务结果绑定到一个中间层数据模型上,以及将数据模型的域绑定到用户界面上。更多有关数据模型的信息见“Storing Data

<!--[if !supportLists]-->§  <!--[endif]-->ArrayCollection 或者XMLListCollection对象绑定到基于列表(List-based)的控件的dataProvider属性上。

<!--[if !supportLists]-->§  <!--[endif]-->将复杂属性的一个单独部分绑定到用户界面控件上。一个例子就是“主-从”式的场景,在这个场景中,点击列表控件的一个条目,就在其它几个控件中显示数据。

<!--[if !supportLists]-->§  <!--[endif]-->通过在绑定表达式中使用ECMAScript for XML (E4X)表达式将XML数据绑定到用户界面的控件上。

  尽管数据绑定是一个非常强大的机制,但它不适合所有的情况。比如,有一个很复杂的用户界面,这个界面的某个部分必须按照严格的先后次序来更新,这种情下,更适合使用一个按次序赋值的方法。另外,绑定在每次属性发生变化时执行,如果程序中只在某些特定的时候才需要被告知属性变化,那么使用绑定机制并不是最佳方案。

分享到:
评论
1 楼 steven186 2008-10-16  
非常好啊,十分感谢你的分享。

相关推荐

    flex数据绑定的原理

    在Flex开发中,数据绑定(Data Binding)是一种强大的机制,它允许UI组件的状态与应用程序的数据模型之间自动同步。数据绑定的原理是通过监听数据源的变化,并自动更新与之绑定的UI组件,反之亦然,从而简化了代码并...

    FLEX资源——FLEX数据绑定专题(中文PDF)

    《FLEX数据绑定专题》是一本深入探讨Adobe Flex中数据绑定技术的专业中文PDF文档。Flex是一种用于构建富互联网应用程序(RIA)的开放源码框架,它允许开发者创建交互性强、功能丰富的Web应用。数据绑定是Flex中一个...

    flex数据绑定 pdf

    Flex数据绑定是Adobe Flex框架中的核心特性之一,它允许开发者将UI组件的显示状态与应用程序的数据模型紧密关联,实现数据的动态更新。这份名为“FLEX数据绑定专题”的PDF文档,很可能深入探讨了这一主题,提供了...

    FLEX数据绑定四种方式

    ### FLEX数据绑定四种方式详解 #### 一、概述 数据绑定是现代应用程序开发中一个重要的概念和技术。在Flex框架中,数据绑定被广泛应用来连接数据源与用户界面(UI)元素,使得数据能够实时更新并反映到界面上。本文将...

    Flex数据绑定专题

    ### Flex数据绑定专题详解 #### 一、数据绑定概述 数据绑定是Flex应用程序开发中的核心概念之一,它指的是将一个对象中的数据与另一个对象中的数据建立连接的过程。通过数据绑定,开发者可以实现在应用程序的不同...

    flex企业应用开发笔记-数据绑定

    在Flex企业应用开发中,数据绑定是连接UI组件与数据模型的重要机制,使得视图能够自动反映模型的变化,反之亦然。这篇笔记主要探讨的是如何在Flex中实现数据绑定,以及其在实际应用中的作用。 数据绑定是Flex框架的...

    flex页面跳转及数据绑定

    在Flex开发中,页面跳转和数据绑定是两个核心概念,它们对于构建动态且交互性强的应用至关重要。让我们分别深入探讨这两个主题。 首先,Flex页面跳转。在Flex中,有多种方式来实现场景间的切换: 1. **ViewStack...

    flex数据绑定

    ### Flex 数据绑定详解 #### 一、数据绑定概念与重要性 数据绑定是Flex和Adobe AIR应用程序开发中的关键概念之一,其主要目的是实现不同对象之间的数据传输与同步更新。通过数据绑定,开发者能够轻松地在用户界面...

    FLEX数据绑定专题

    在Flex开发中,数据绑定是一项核心特性,它允许开发者轻松地将用户界面组件与应用程序的数据模型关联起来。本文将深入探讨“FLEX数据绑定专题”,包括其多种实现方式以及如何结合Java作为后端来实现数据交换。 首先...

    Flex Bind数据绑定实例代码

    Flex Bind数据绑定是Adobe Flex应用程序开发中的核心特性,它允许开发者在用户界面组件和应用程序模型之间建立动态连接,实现数据的自动同步。这种强大的功能极大地简化了编程逻辑,特别是处理用户交互和数据更新时...

    flex 数据绑定 dataGrid.rar

    Flex数据绑定是Adobe Flex开发中的核心特性之一,它允许开发者将UI组件的属性与应用程序的数据模型直接关联。在本示例中,我们关注的是如何在Flex中使用数据绑定技术来操作DataGrid组件,这是一个用于展示表格数据的...

    FLEX 数据绑定专题一(转)

    在提供的压缩包文件"DataBindLab"中,可能包含了相关的示例代码或实验,帮助读者更好地理解和实践FLEX数据绑定。通过实际操作和分析这些实验,可以深化对数据绑定的理解,并将其应用到自己的项目中。建议读者结合...

    flex3 数据绑定 总结

    总的来说,Flex 3 的数据绑定是一种强大的机制,它简化了应用程序中数据流的管理。通过 MXML 或 ActionScript,开发者可以选择最适合其需求的方式来实现数据绑定,从而提高代码的可读性和可维护性。无论是简单的属性...

    flex datagrid分页 动态绑定数据源

    本篇文章将深入探讨“flex datagrid分页动态绑定数据源”的相关知识点。 首先,让我们理解Flex Datagrid的基本概念。Flex Datagrid是一个灵活的数据呈现控件,能够处理各种数据源,包括ArrayCollection、...

    Flex初级数据绑定代码

    通过上述分析,我们可以看出Flex中的数据绑定非常简洁高效,能够帮助开发者快速构建动态且响应式的用户界面。本例中的数据绑定机制展示了如何通过简单的方式实现滑块控制画布缩放效果的功能,对于初学者来说是非常好...

    flex帮助文档--(flex学习文档)

    这个名为"flex帮助文档--(flex学习文档)"的压缩包文件包含了关于Flex的详细学习资料,尤其是针对初学者或者希望深入理解Flex的开发者。 1. **Flex的基本概念** Flex是一个基于MXML和ActionScript的开源框架,...

    Flex.3数据绑定(2)

    Flex.3数据绑定(2)Flex.3数据绑定(2)Flex.3数据绑定(2)Flex.3数据绑定(2)

    Flex 数据绑定

    Flex 数据绑定是Adobe Flex框架中的一个核心特性,它允许开发者创建动态、响应式的用户界面,使得数据模型的变化能够实时反映到视图上,反之亦然。这种机制大大简化了UI与后台数据同步的过程,减少了手动更新UI的...

    flex快速入门 译自Flex 官方文档

    6. **数据绑定**: Flex支持数据绑定,使得UI组件的状态可以直接与后台数据模型关联,实现数据驱动的开发模式。 7. **事件处理**: 通过监听和响应事件,实现用户与应用的交互。 8. **Flex应用生命周期**: 包括初始化...

    Flex高级数据绑定实例(界面语言切换)

    ### Flex高级数据绑定实例——界面语言切换 #### 概述 在Flex开发中,实现界面的多语言切换是一项常见的需求。本示例通过一个具体的代码片段来展示如何使用Flex中的高级数据绑定技术来实现这一功能。该示例不仅...

Global site tag (gtag.js) - Google Analytics