你对在ActionScript 中定义Flex数据绑定是否了解,这里和大家分享一下,通过使用bindProperty() 方法可以让我们创建一个到用变量实现的属性的数据绑定,或者用bindSetter()方法创建一个到用方法实现的属性的Flex数据绑定。
在ActionScript 中定义Flex数据绑定
通过使用mx.binding.utils.BindingUtils能够在ActionScript中定义绑定。这个类定义了几个静态方法,通过使用bindProperty() 方法可以让我们创建一个到用变量实现的属性的数据绑定,或者用bindSetter()方法创建一个到用方法实现的属性的Flex数据绑定。
(1)在MXML 与在ActionScript 定义Flex数据绑定的区别
编译期在MXML 中定义Flex数据绑定与在运行期在ActionScript 中定义Flex数据绑定有一些不同之处:
◆不能在由bindProperty()或者bindSetter()方法定义绑定表达式中引入ActionScript 代码。相反,使用bindSetter()方法可以指定一个在绑定发生时调用的
方法。
◆ 不能在由ActionScript 中定义的绑定表达式中引入E4X 表达式。
◆ 在由the bindProperty()或者bindSetter()方法定义的Flex数据绑定表达式的属性链中不能引入函数或者数组元素。更多信息见Working with bindable property chains.
◆同运行时使用bindProperty()或者bindSetter()定义的Flex数据绑定相比,MXML 编译器有更好的警告和错误检查支持。
(2)范例:在ActionScript 中定义Flex数据绑定
下面的例子是用bindSetter()建立了一个Flex数据绑定。bindSetter()方法的参数设置如下:
◆ 源(source) 对象
◆ 源(source) 属性名
◆ 当源(source)属性变化被调用的方法。
下面的范例中,当向TextInput 控件中输入文本时,文本会被转换为大写形式并拷贝给TextArea
控件:
- <?xml version="1.0"?>
- <!-- binding/BindSetterAS.mxml -->
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
- <mx:Script>
- <![CDATA[
- import mx.binding.utils.*;
- import mx.events.FlexEvent;
- // Method called when myTI.text changes.
- public function updateMyString(val:String):void {
- myTA.text = val.toUpperCase();
- }
- <!-- Event listener to configure binding. -->
- public function mySetterBinding(event:FlexEvent):void {
- var watcherSetter:ChangeWatcher =
- BindingUtils.bindSetter(updateMyString, myTI, "text");
- }
- ]]>
- </mx:Script>
- <mx:Label text="Bind Setter using setter method"/>
- <mx:TextInput id="myTI"
- text="Hello Setter" />
- <mx:TextArea id="myTA"
- initialize="mySetterBinding(event);"/>
- </mx:Application>
(3)定义绑定观察者 (watchers)
Flex 有个mx.binding.utils.ChangeWatcher 类,可以用这个类来定义一个Flex数据绑定观察者。通常,Flex数据绑定观察者在绑定发生时激活一个事件监听器。可按照下面的范例使用
ChangeWatcher 的watch()即可建立一个Flex数据绑定观察者:
- <?xml version="1.0"?>
- <!-- binding/DetectWatcher.mxml -->
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
- initialize="initWatcher();">
- <mx:Script>
- <![CDATA[
- import mx.binding.utils.*;
- import mx.events.FlexEvent;
- import mx.events.PropertyChangeEvent;
- public var myWatcher:ChangeWatcher;
- // Define binding watcher.
- public function initWatcher():void {
- // Define a watcher for the text binding.
- ChangeWatcher.watch(textarea, "text", watcherListener);
- }
- // Event listener when binding occurs.
- public function watcherListener(event:Event):void {
- myTA1.text="binding occurred";
- // Use myWatcher.unwatch() to remove the watcher.
- }
- ]]>
- </mx:Script>
- <!-- Define a binding expression_r to watch. -->
- <mx:TextInput id="textinput" text="Hello"/>
- <mx:TextArea id="textarea" text="{textinput.text}"/>
- <!-- Trigger a binding. -->
- <mx:Button label="Submit" click="textinput.text='Goodbye';"/>
- <mx:TextArea id="myTA1"/>
- </mx:Application>
上面的范例中,为Flex数据绑定观察者定义了事件监听器,在这个事件监听器中使用了单个参数来包含事件对象。事件对象的数据类型由被观察的属性所决定。每个可绑定的属性会不同的
事件类型以及相关的事件对象。有关确定事件类型的更多信息见“使用Bindable 元数据标记”。
【编辑推荐】