AS绑定到对象属性
[Bindable]
var object:Object = {
property: "Property"
};
MXML
<s:Label text="{object.property}"/>
的标签文本将是 “财产”,但如果object.property改变时,标签将不会被更新。有没有办法解决?
AS绑定到对象属性
[Bindable]
var object:Object = {
property: "Property"
};
MXML
<s:Label text="{object.property}"/>
的标签文本将是 “财产”,但如果object.property改变时,标签将不会被更新。有没有办法解决?
除非实施,否则对象或集合的属性不会派发属性更改事件。
与你的例子类似,对数组元素的改变不会被绑定。
诸如ArrayCollection之类的集合包装代理中的对象以分派绑定事件。
使用ObjectProxy
将更改分派给您的对象。
实例化一个ObjectProxy和听的PropertyChangeEvent:
objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, propertyChangeHandler);
通过代理访问你的对象,比如设置一个名为“财产”属性:
objectProxy.property = "Hello, world";
这个例子与创建一个ObjectProxy定时器每秒更改“属性”成员:
<?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="955"
minHeight="600"
creationComplete="creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.events.PropertyChangeEvent;
import mx.utils.ObjectProxy;
private var object:Object = {};
private var objectProxy:ObjectProxy;
private var timer:Timer;
protected function creationCompleteHandler(event:FlexEvent):void
{
objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, propertyChangeHandler);
timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
}
protected function propertyChangeHandler(event:PropertyChangeEvent):void
{
label.text = (event.source).property;
}
protected function timerHandler(event:TimerEvent):void
{
objectProxy.property = Math.random() * 1000;
}
]]>
</fx:Script>
<s:Label id="label" />
</s:Application>
你绑定到对象本身。这意味着,只有在对象的引用被改变时,标签的文本才会改变。
object={property:"Hello World"}
在这种情况下,绑定将完成这项工作。
如果您希望文本在更改某些属性后进行更新,则应该使该属性为Bindable。
public class MyObject {
[Bindable]
public var property:String;
}
然后声明MyObject
类的变量和结合其property
。