flex的代理绑定类
数据绑定不能直接使用数组,如Array,因为数组不能分发导致用户界面更新事件。
ObjectProxy是为Object准备的代理,
XMLListCollection是为XMLList准备的代理,
ArrayCollection是为Array准备的代理,这里Array有两种代理:一个是ArrayCollection(不仅支持数据绑定,还具有排序、筛选和快速数据查询等功能),另一个是ArrayList。
ObjectProxy 类
如果一个类要想使用数据绑定的功能,必须得实现IPropertyChangeNotifier接口;否则,这个对象不能够绑定的。
但是,有一些类的属性或变量,比如简单的变量,它们不能使用[Bindable]标签,也不能实现必要的接口。也就是说,
这个类属于你创建的,你可以添加[Bindable]来轻松实现绑定的功能;但若这个类不属于你,而你又想实现绑定的功能,
这时你就可以考虑使用ObjectProxy类。ObjectProxy 类包装一个非绑定类和一个属性改变就会派发的PropertyChangeEvent事件。
下面是ObjectProxy的应用例子。创建一个ObjectProxy类对象,并用非绑定类来实例化ObjectProxy,在这里我们用UserInfo这个类。
<xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="1024" minHeight="768"
creationComplete="creationCompleteHandler()">
<fx:Script>
<!--[CDATA[
import mx.events.PropertyChangeEvent;
import mx.utils.ObjectProxy;
import vo.UserInfo;
private var userInfo:UserInfo = new UserInfo();
private var objectProxy:ObjectProxy;
protected function creationCompleteHandler():void
{
objectProxy = new ObjectProxy( userInfo );
objectProxy.addEventListener( PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChange );
objectProxy.userName = "EladElrom";
objectProxy.password = "123";
}
private function onPropertyChange( event:PropertyChangeEvent ):void
{
lbl.text = event.newValue.toString();
}
]]-->
</fx:Script>
<s:Label id="lbl" />
</s:Application>
[/node]
接着给实例化对象添加一个PropertyChangeEvent事件的侦听函数,并跟踪UserInfo某个条目的改变。