2008-09-19 61 views
4

MXML讓你做的,如一些非常非常強大的數據綁定:重複複雜的MXML ActionScript中結合

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

我發現BindingUtils類可以將值綁定到簡單的屬性,但無論是綁定的上方做這個。是否可以在AS3代碼中執行相同的操作,或者是從我的MXML靜默地生成許多代碼行? 任何人都可以複製上面的純AS3,從開始:

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

回答

0

相信彎曲產生一個小的匿名函數來處理這個問題。

你可以使用返回ChangeWatcher做類似。你甚至可以在changewatcher調用中創建一個新的匿名函數。

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更長,因爲它必須更通用。在這個例子中,它可能會產生兩個函數,每個綁定表達式都有一個函數。

2

您還可以查看自動生成的代碼,彎曲,當它編譯你的MXML文件中,通過添加-keep參數編譯器設置讓。您可以通過選擇項目屬性並查看「Flex編譯器」選項來找到您的設置,然後在「其他編譯器參數:」下添加「-keep」到已存在的項目。

一旦這樣做的Flex將在源文件夾中創建一個「生成」目錄和裏面你會發現所有德暫時性的,因爲編譯過程中使用的文件。