`
hereson
  • 浏览: 1460809 次
  • 性别: 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 官方文档

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

    [AB PLC例程源码][MMS_044666]Translation N-A.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    kolesar_3cd_01_0716.pdf

    kolesar_3cd_01_0716

    latchman_01_0108.pdf

    latchman_01_0108

    matlab程序代码项目案例:matlab程序代码项目案例MPC在美国高速公路场景中移动的车辆上的实现.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    petrilla_01_0308.pdf

    petrilla_01_0308

    [AB PLC例程源码][MMS_041452]Speed Controls in Plastic Extrusion.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    强化学习驱动下DeepSeek技术创新及其对AI发展的影响

    内容概要:本文档由张卓老师讲解,重点探讨DeepSeek的技术革新及强化学习对未来AI发展的重要性。文章回顾了AI的历史与发展阶段,详细解析Transformer架构在AI上半场所起到的作用,深入介绍了MoE混合专家以及MLA低秩注意机制等技术特点如何帮助DeepSeek在AI中场建立优势,并探讨了当前强化学习的挑战和边界。文档不仅提及AlphaGo和小游戏等成功案例来说明强化学习的强大力量,还提出了关于未来人工通用智能(AGI)的展望,特别是如何利用强化学习提升现有LLMs的能力和性能。 适用人群:本资料适宜对深度学习感兴趣的研究人员、开发者以及想要深入了解人工智能最新进展的专业人士。 使用场景及目标:通过了解最新的AI技术和前沿概念,在实际工作中能够运用更先进的工具和技术解决问题。同时为那些寻求职业转型或者学术深造的人提供了宝贵的参考。 其他说明:文中提到了许多具体的例子和技术细节,如DeepSeek的技术特色、RL的理论背景等等,有助于加深读者对于现代AI系统的理解和认识。

    有师傅小程序开源版v2.4.14+前端.zip

    有师傅小程序开源版v2.4.14 新增报价短信奉告 优化部分细节

    [AB PLC例程源码][MMS_047333]Motor Sequence Starter with timers to start.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    商城二级三级分销系统(小程序+后台含源码).zip

    商城二级三级分销系统(小程序+后台含源码).zip

    li_3ck_01b_0918.pdf

    li_3ck_01b_0918

    nicholl_3cd_01_0516.pdf

    nicholl_3cd_01_0516

    1995-2022年 网络媒体关注度、报刊媒体关注度与媒体监督相关数据.zip

    媒体关注度是一个衡量公众对某个事件、话题或个体关注程度的重要指标。它主要反映了新闻媒体、社交媒体、博客等对于某一事件、话题或个体的报道和讨论程度。 媒体监督的J-F系数(Janis-Fadner系数)是一种用于测量媒体关注度的指标,特别是用于评估媒体对企业、事件或话题的监督力度。J-F系数基于媒体报道的正面和负面内容来计算,从而为公众、研究者或企业提供一个量化工具,以了解媒体对其关注的方向和强度。 本数据含原始数据、参考文献、代码do文件、最终结果。参考文献中JF系数计算公式。 指标 代码、年份、标题出现该公司的新闻总数、内容出现该公司的新闻总数、正面新闻数全部、中性新闻数全部、负面新闻数全部、正面新闻数原创、中性新闻数原创、负面新闻数原创,媒体监督JF系数。

    [AB PLC例程源码][MMS_040315]Double INC and Double DEC of INT datatype.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_047773]Convert Feet to Millimeters.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    matlab程序代码项目案例:matlab程序代码项目案例论文代码 多篇RMPC 鲁棒模型预测控制Paper-code-implementation.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lusted_3cd_02_0716.pdf

    lusted_3cd_02_0716

Global site tag (gtag.js) - Google Analytics