1

いくつかのコンポーネントで共有されている XML オブジェクトがあります。BindSetter を特定のタグに設定し、そのプロパティが変更された場合に関数を呼び出すことはできますか?

試してみましたが、BindSetter 呼び出しは XML タグ名を受け入れないようです。

単純に [Bindable] を使用し、MXML でタグ名 (つまり、label text="{myXMLObject.tagName}") を使用する場合、これは正常に機能するため、これは純粋な AS でも機能する必要があると考えています。どのように。

ヒントはありますか?

コメント/回答に基づいて、これが私のコード/使用法の非常に基本的な例です。

Flex アプリの 2 つのコンポーネントは、どちらも同じ XML オブジェクトを継承します。

[Bindable] public var sharedData:XML;

次に、すべてのコンポーネントの creationComplete ハンドラーで、BindSetter;を呼び出します。

BindingUtils.bindSetter(sharedDataChange, sharedData, "tagName");

sharedDataChangeこの時点では何もせず、関数が呼び出されたことをトレースするだけです。

次に、 の値を表示する Label sharedData.tagName、 textInput 、および を設定するボタンを取得しましたsharedData.tagName = textInput.text。MXML バインディング ( {label.text = sharedData.tagName}) を使用すると、これは正常に機能します。しかし、私が言ったように、BindSetter 関数は変更を検出していないようです。

4

1 に答える 1

0

あなたlabel text="{myXMLObject.tagName}"のために働くなら、

 BindingUtils.bindSetter(function(value:*):void{
     //Do something
 }, this, ["myXMLObject","tagName"]);  

も同様に機能するはずですが、myXMLObject' ' でなければなりませんpublic

BindingUtilsが XML を操作しているか、他のオブジェクトを操作しているかに違いはありません。object が として指定されている場合[Bindable]、 はBindingUtilsそれを正しく処理します。

更新:大きな違いがあります

BindingUtils.bindSetter(sharedDataChange, sharedData, "tagName"); 

BindingUtils.bindSetter(sharedDataChange, this, ["sharedData", "tagName"]);

何か ' shareData = ...'を書くsetterと、最初の式は呼び出されませんが、2 番目の式では呼び出されます。

于 2012-04-05T06:58:32.727 に答える