数据绑定何时发生?
数据绑定发生在以下情况:
1: 由于源已经被改变,数据绑定源发出一个事件,这是事件可以在应用执行的任何时间发出。这个事件触发Flex将源属性的值拷贝到目的属性。
2: 在应用启动的过程中,当源对象发出initialize事件时,所有数据绑定都一次性触发以初始化目的属性。
UIComponent 类的executeBindings()方法执行该UIComponent 作为目的对象上的所有绑定。所有的容器和控件,以及Repeater 组件都从UIComponent 类继承。容器和Repeater 类的
executeChildBindings()方法执行其中作为目的对象的子对象上的所有绑定。所有的容器都从Container 类继承。
这些方法在期望的绑定没有发生时提供了一种执行绑定的方法。通过增加一条代码,比如对executeChildBindings()方法的调用,就可以在完成一个属性变化而没有使绑定执行的时候来
更新用户界面。但是只有在确保绑定没有自动发生时才能使用executeBindings()方法。
数据绑定是将一个对象中的数据同另一个对象中的数据联系在一起的过程。数据绑定为在应用的不同层之间传递数据提供了便捷方法。数据绑定需要一个源属性,一个目的属性,以及用于表明何时将数据从源属性拷贝到目的属性的触发事件。当源属性变化时,对象发出触发事件。
Adobe Flex 提供三种方法用于指定数据绑定:
【1】MXML 中的大括号({})语法.
【2】MXML 中的<mx:Binding>标记.
【3】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 的当前值拷贝到目的属性。
支持数据绑定的属性
可以把对象的所有属性都作为数据绑定表达式的目的属性,但要想使一个属性成为数据绑定表达式的源,那么源对象必须被实现为支持数据绑定。这意味着这个对象在属性值发生变
化时要发出一个事件以触发绑定
【1】使用只读属性作为数据绑定源
通过定义一个只有getter 方法而没有setter 方法来定义个一个只读属性作为数据绑定表达式的源时,Flex 只在应用启动时执行一次数据绑定。
【2】使用静态属性作为数据绑定源
可以自动用一个静态常量作为数据绑定表达式的源。Flex 只在应用启动时执行一次数据绑定。
创建用作数据绑定源的属性
当创建一个用于绑定表达式源的属性,那么在源属性值发生变化时Flex 就能自动将值拷贝到所有的目的属性。为了让Flex 执行拷贝,必须使用[Bindable]标记来向Flex 注册这个属
性。The [Bindable] 元数据标记有以下语法:
[Bindable]
[Bindable(event="eventname")]
如果忽略了事件名称,Flex 自动地创建一个名为propertyChange 的事件,并且在属性发生变化时,由Flex 发出这个事件以触发所有以这个属性作为源的数据绑定。如果你指定了事
件名称,那么在源属性发生变化时你就要自己负责发出这个事件。