4

MXMLを使用すると、次のような非常に強力なデータバインディングを実行できます。

<mx:Button id="myBtn" label="Buy an {itemName}" visible="{itemName!=null}"/>

BindingUtilsクラスは値を単純なプロパティにバインドできることがわかりましたが、上記のどちらのバインディングもこれを行いません。AS3コードで同じことを行うことは可能ですか、それともFlexはMXMLから何行ものコードをサイレントに生成していますか?誰でも上記を純粋なAS3で複製できますか?

var myBtn:Button = new Button();
myBtn.id="myBtn";
???
4

3 に答える 3

2

コンパイラ設定に -keep 引数を追加することで、flex が mxml ファイルをコンパイルするときに作成する自動生成コードを表示することもできます。プロジェクトのプロパティを選択し、「Flex コンパイラ」オプションを確認して設定を見つけることができます。次に、「追加のコンパイラ引数:」の下に、既にあるものに「-keep」を追加します。

完了すると、Flex はソース フォルダーに「生成された」ディレクトリを作成し、その中にコンパイル中に使用された一時ファイルとしてすべてのファイルを見つけます。

于 2008-09-19T18:34:00.480 に答える
2

その方法は、 を使用することbindSetterです。これは、例の MXML がコンパイルされる前に ActionScript に変換されるときに、舞台裏で行われる方法でもあります。

// assuming the itemName property is defined on this:
BindingUtils.bindSetter(itemNameChanged, this, ["itemName"]);

// ...

private function itemNameChanged( newValue : String ) : void {
  myBtn.label   = newValue;
  myBtn.visible = newValue != null;
}

...ただし、MXML から ActionScript への変換によって生成されるコードは、より一般的なものにする必要があるため、より長くなります。この例では、バインディング式ごとに 1 つずつ、2 つの関数が生成される可能性があります。

于 2008-09-19T15:32:39.230 に答える
0

これに対処するために、flex は小さな無名関数を生成すると思います。

ChangeWatcher を使用して同様のことができます。おそらく、changewatcher 呼び出しで新しい無名関数を作成することもできます。

于 2008-09-19T15:27:47.730 に答える