4. 使用Bindable 元数据标记
当属性成为数据绑定表达式源时,Flex 在源属性发生变化时自动将源属性的值拷贝给目的
属性。为了告知Flex 去执行这个拷贝工作,必须用[Bindable]元数据标记将这个属性注册到
Flex 中,并且源属性必须发出一个事件。
[Bindable] 元数据标记语法如下:
[Bindable]
[Bindable(event="eventname")]
如果忽略事件名称,Flex 会自动创建一个名为propertyChange,类型为
PropertyChangeEvent 的事件。
可以在三个地方使用[Bindable]元数据标记:
1. 在public 类定义之前使用。
在这个地方使用[Bindable]元数据标记使得类中定义的全部public 变量以及同时具
有setter 和getter 方法的public 属性能成为数据绑定表达式的源。这种情况下,
[Bindable]不使用任何参数,如下例所示:
[Bindable]
public class TextAreaFontControl extends TextArea {}
Flex 编译器自动为所有public 属性生成名为propertyChange,类型为
PropertyChangeEvent 的事件,以使这些属性可以被用于数据绑定表达式的源。
如果对属性进行写操作的时候属性值保持不变,Flex 不会发出事件或者更新属
性,这里判断属性是否不同可以翻译为如下的检测语句:
(oldValue !== value)
这意味着,如果属性包含了一个对象引用,并且引用被更改为引用了一个不同但
是等价的对象,那么绑定也会被触发。如果属性没有被改变,而它所指向的对象在
内部发生了变化,那么绑定不会被触发。
注意:在public class 定义之前使用[Bindable]元数据标记只是将绑定作用于
public 属性,它不会作用于private 和protected 属性以及那些定义在其他
namespace 中的属性。必须在非public 属性前插入[Bindable]元数据标记,才能使
之成为数据绑定表达式的源。
2. 在public,protected 或者private 属性之前使用该标记可以将这个特定的属性定
义为支持数据绑定,标记可以有以下的形式:
[Bindable]
public var foo:String;
Flex 编译器自动为那个属性产生名为propertyChange,类型为PropertyChangeEvent
的事件,如果写入的属性值不变,Flex 不会发出事件或者更新属性。也可以在
[Bindable]元数据标记中指定事件名,如下的例子所示:
[Bindable(event="fooChanged")]
public var foo:String;
这种情况下,开发者要自己负责产生和发出事件,通常在类的其他方法中完成
这些工作。尽管在类的级别上指定了[Bindable]标记,如果想要为事件命名,仍然
可以在[Bindable]中包含指定名称的事件。
3. 在由getter 或者setter 方法所定义的public,protected 或者private 属性之前
使用该标记。这种情况下,要想使用[Bindable]标记必须为属性同时定义setter 和
getter 方法。如果只是定义了一个setter 方法,那么你就创建了一个“只写”属性,
这样的属性不能作为数据绑定表达式的源。如果只定义getter 方法,那么就创建了
一个“只读”属性,把只读属性当作数据绑定源而不插入[Bindable]标记,就如同
使用了一个用const 关键字定义的变量来作为数据绑定表达式的源。(这样的绑定
源只能在应用启动时触发绑定一次,以后就不会再触发)。
这个标记可以由下面的形式定义:
[Bindable]
public function set shortNames(val:Boolean):void {
...
}
public function get shortNames():Boolean {
...
}
Flex 编译器自动为这个属性产生一个名为propertyChange,类型为
PropertyChangeEvent 的事件。如果属性值在写入的时候保持不变,Flex 不会发出
事件或者更新属性。为了确定属性是否变化,Flex 调用getter 方法来获取属性的当
前值。
也可以为事件指定名称,如下例所示:
[Bindable(event="changeShortNames")]
public function set shortNames(val:Boolean):void {
...
// Create and dispatch event.
dispatchEvent(new Event("changeShortNames"));
}
// Get method.
public function get shortNames():Boolean {
...
}
这种情况下,开发者要负责生成和发出事件。通常是在setter 方法中完成这个工作。
并且Flex 不会检查旧值和新值是否不同。尽管在类的级别上指定了[Bindable]标记,如果
想要为事件命名,仍然可以在[Bindable]中包含指定名称的事件。
下面的代码使以变量形式定义的maxFontSize 和minFontSize 属性可以作为数据绑定的
源:
// Define public vars for tracking font size.
[Bindable]
public var maxFontSize:Number = 15;
[Bindable]
public var minFontSize:Number = 5;
在下面的例子中,使setter 和getter 方法形式定义的public 属性成为数据绑定的源。
[Bindable]元数据标记中引入了属性变化时由setter 方法发出的事件:
// Define private variable.
private var _maxFontSize:Number = 15;
[Bindable(event="maxFontSizeChanged")]
// Define public getter method.
public function get maxFontSize():Number {
return _maxFontSize;
}
// Define public setter method.
public function set maxFontSize(value:Number):void {
if (value <= 30) {
_maxFontSize = value;
} else _maxFontSize = 30;
// Create event object.
var eventObj:Event = new Event("maxFontSizeChanged");
dispatchEvent(eventObj);
}
在这个例子中,setter 更新了属性的值,然后创建并发出了一个事件来激发对数据绑定目的
属性的更新。
在MXML 文件中,通过在<mx:Metadata>块中引入[Bindable]元数据标记,就可以将所有以变量
形式定义的public 属性成为数据绑定的源,例子如下:
<mx:Metadata>
[Bindable]
</mx:Metadata>
在<mx:Script>块中也可以在使用[Bindable]元数据标记使单个的变量形式定义的属性成
为数据绑定表达式的源。另外,也可以对setter 及getter 方法定义的属性使用[Bindable]元
数据标记,使之成为数据绑定表达式的源。
将只读属性作为数据绑定的源
使用getter 方法而没有setter 就可以自动定义一个只读属性作为数据绑定表达式的源。
Flex 只在应用启动时执行一次数据绑定。因为来自于只读属性的数据绑定只在应用启动时发生
一次,所以可以对只读属性省略[Bindable]元数据标记。
用静态属性作为数据绑定源
可以将静态属性作为数据绑定表达式的源,Flex 在应用启动时执行一次数据绑定,然后在
静态属性发生变化的时候再执行数据绑定。
可以将静态常量自动作为数据绑定表达式的源,Flex 只在应用启动时执行一次数据绑定。因
为数据绑定只在应用启东时发生一次,所以可以对静态常量省略[Bindable]元数据标记。下面
例子使用静态常量作为数据绑定表达式的源。
<?xml version="1.0"?>
<!-- binding/StaticBinding.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
// This syntax casues a compiler error.
// [Bindable]
// public static var varString:String="A static var.";
public static const constString:String="A static const.";
]]>
</mx:Script>
<!-- This binding occurs once at application startup. -->
<mx:Button label="{constString}"/>
</mx:Application>
使用可绑定属性链进行工作
当指定一个属性作为数据绑定表达式的源时,Flex 不仅监控这个属性的变化,也会监控这
个由这个属性作为开始点的属性链的变化。整个属性链,包括源属性,被称为“可绑定的属性
链”。在下面的例子中,firstName.text 是一个可绑定的属性链:
<mx:Text id="myText" text="{firstName.text}"/>
开发者可以使用很长的属性链,如下例所示:
<mx:Text id="myText" text="{user.name.firstName.text}"/>
只有当text 属性是可绑定的,数据绑定机制才能检查text 属性的变化。但是,如果在运
行时,想要向属性链中的部分属性赋予新值,那么属性链中的每个属性都必须是可绑定的,才
能使数据绑定机制起作用。否则,在运行时更改user,name 或者firstName 属性会导致数据绑
定机制无法检查text 属性的变化。
在使用BindingUtils.bindProperty()或者BindingUtils.bindSetter()方法时,可以将可
绑定的属性链作为方法的参数,例如,bindProperty()方法有以下的声明:
public static function bindProperty(site:Object, prop:String, host:Object,
chain:Object, commitOnly:Boolean = false):ChangeWatcher
Host 和chain 属性指定了数据绑定表达式的源。使用bindProperty()方法可以定义一个
数据绑定表达式,如下:
bindProperty(myText, 'text', user, ["name","firstName","text"]);
这个例子中,["name","firstName","text"]定义了相对于user 对象的可绑定属性链。注
意,在本例中,user 不是可绑定属性链的一部分。
在MXML 数据绑定表达式中,可绑定属性连总是相对于this。因此,要想定义一个同上面的
MXML 等价的数据绑定表达式,应按如下例子使用bindProperty()方法:
bindProperty(myText, 'text', this, ["user", "name","firstName","text"]);
分享到:
相关推荐
《FLEX数据绑定专题》是一本深入探讨Adobe Flex中数据绑定技术的专业中文PDF文档。Flex是一种用于构建富互联网应用程序(RIA)的开放源码框架,它允许开发者创建交互性强、功能丰富的Web应用。数据绑定是Flex中一个...
### Flex数据绑定专题详解 #### 一、数据绑定概述 数据绑定是Flex应用程序开发中的核心概念之一,它指的是将一个对象中的数据与另一个对象中的数据建立连接的过程。通过数据绑定,开发者可以实现在应用程序的不同...
本文将深入探讨“FLEX数据绑定”这一专题,它是一种强大的机制,允许视图与模型之间的自动同步,使得开发者能够更加专注于业务逻辑而不是繁琐的同步操作。本文是系列文章的第一部分,主要介绍数据绑定的基本概念、...
本文将深入探讨“FLEX数据绑定专题”,包括其多种实现方式以及如何结合Java作为后端来实现数据交换。 首先,数据绑定是Flex中一种强大的工具,它简化了UI组件状态与应用数据之间的同步。在Flex 4中,数据绑定主要...
这份名为“FLEX数据绑定专题”的PDF文档,很可能深入探讨了这一主题,提供了详细的理论知识和实践案例。 在Flex中,数据绑定是一个自动化的过程,它使得视图组件(如文本框、列表等)能够自动反映出数据源的变化,...
Flex数据绑定是Adobe Flex应用程序开发中的核心特性,它允许...通过阅读《FLEX数据绑定专题.pdf》这样的文档,你可以深入理解Flex数据绑定的工作原理,学习如何有效地利用这一功能,提升Flex应用的开发效率和用户体验。
它允许开发者使用MXML和AS3来设计和编写用户界面,同时提供了强大的数据绑定和组件模型,使得开发复杂的交互式应用变得简单。在本项目中,Flex可能被用来构建了网页的主要结构和动态功能,如内容滑动效果。 HTML...
压缩包中的“FLEX数据绑定专题”可能包含以下内容: 1. **基础教程**:介绍数据绑定的基本概念,如何在MXML和ActionScript中设置绑定,以及不同类型的绑定。 2. **案例分析**:通过实际项目示例,展示数据绑定在...
在提供的压缩包文件"Flex内存数据做范围分段专题图"中,可能包含了示例代码、数据文件和详细的教程,用于演示如何在Flex环境中实现这一功能。通过学习这些资源,开发者可以更深入地了解如何在实际项目中应用SuperMap...
Flex饼图向上吐槽是一个关于Adobe Flex中饼图组件的专题,这个组件被设计用来以图形化的方式展示数据,尤其适用于显示部分与整体的关系。在Flex中,饼图是一种常见的图表类型,它将数据集中的各个数据项以扇形区域...
总的来说,使用Flex实现柱状专题图层涉及到了面向对象编程、图形渲染以及数据绑定的概念。通过灵活地调整和定制ColumnChart,我们可以创建出满足特定需求的地图可视化效果,从而更好地呈现和分析地理空间数据。
Flex的核心优势在于其强大的数据绑定功能、灵活的布局管理器以及丰富的用户界面组件库。这些特性使得开发者能够轻松构建出既美观又高效的Web应用。 #### Flex学习资源推荐 1. **CSDN专题文章:“Flex 学习资料汇总...
4. **数据绑定与模型视图控制器(MVC)架构**:学会如何利用ExtJs的数据绑定特性以及MVC架构模式组织代码,提高开发效率和代码可维护性。 ### 专题-深入JavaOOP编程 面向对象编程(OOP)是现代软件开发的基础之一,...
7. **BindableLayout**:绑定布局是Xamarin.Forms 4.0引入的新特性,它允许你将任何布局与数据源绑定,自动根据数据项创建和管理子视图。 在使用这些布局时,还需要理解以下概念: - **Margin和Padding**:这两个...