我有一个MXML对象,我想让它在每次更新其中一个属性时触发它的绑定:
<fx:Object id="myObject">
<fx:prop1>{myButton.selected}</fx:prop1>
<fx:prop2>value</fx:prop2>
<fx:prop3>value</fx:prop3>
</fx:Object>
<Button id="myButton" toggle="true" />
<myComponent obj="{myObject}" />
实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
你无法真正做到你想要的。我知道如何描述它的最好方法是绑定只有一个层次;而你试图将两个级别的绑定深度化。
此代码:
<myComponent obj="{myObject}" />
告诉Flex查看变量myObject,每当myObject被更改时,myComponent上的obj属性也将被更改。它是查看myObject指向的变量。
此代码:
<fx:prop1>{myButton.selected}</fx:prop1>
更改myObject的属性;但不会改变myObject。 myObject仍然指向相同的内存空间/变量空间。
每当myObject上的属性发生变化时,都要更改myComponent;我会用一种完全不同的方法。我将myObject创建为ActionScript类。在属性更改时使用get / set属性并调度事件。
在myComponent中,您可以将obj实现为get / set方法。在set方法中,为在myObject中设置的属性更改添加一个事件侦听器。在你的事件监听器方法中;实施适当的改变。
这与你正在做的事情不是一个微不足道的改变;但它也不应该太难。
答案 1 :(得分:0)
使用ObjectProxy。
示例:Detecting changes to an Object using the Flex ObjectProxy class
private var object:Object = {};
private var objectProxy:ObjectProxy;
objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, updateChange);
然后,直接向代理进行分配:
objectProxy.name = "My Object";