0

MXML オブジェクトがあり、そのプロパティの 1 つが更新されるたびにバインディングをトリガーしたい:

<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}" />

これを達成するための最良の方法は何ですか?

4

2 に答える 2

0

あなたは本当にあなたが望むことをすることはできません。それを説明する方法を私が知っている最良の方法は、バインディングが1レベルの深さしかないということです。一方、バインディングを2レベル深くしようとしています。

このコード:

<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で設定したプロパティの変更にイベントリスナーを追加します。イベントリスナーメソッドでは、適切な変更を実装します。

それはあなたがしていることからの些細な変化ではありません。しかし、それも難しいことではありません。

于 2012-10-30T15:58:56.280 に答える
0

ObjectProxyを使用します。

例:FlexObjectProxyクラスを使用したオブジェクトへの変更の検出

private var object:Object = {};
private var objectProxy:ObjectProxy;

objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, updateChange);

次に、プロキシに直接割り当てます。

objectProxy.name = "My Object";
于 2012-10-30T16:00:20.510 に答える