有没有办法制作一个可绑定的mxml对象?

时间:2012-10-30 15:29:04

标签: flex binding mxml

我有一个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}" />

实现这一目标的最佳方法是什么?

2 个答案:

答案 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";