數據綁定的小技巧 Flex Data Binding Tip
Posted on 2007-03-08 22:58 云自無心水自閑 閱讀(3607) 評論(0) 編輯 收藏 所屬分類: Flex 、Flex2?
現在有一個方便的做法來根據選擇Enable/Disable控件。比如:有一個DataGrid和數個操作數據的按鈕,當選中某行是激活其中一個按鈕,選中另一行時,激活其中另一個按鈕,等等。
通常的做法是寫一大堆的if else語句,或者是設置一堆變量綁定到按鈕上,然后在代碼中設置這些變量的值,比如:
[Bindable] private var somethingSelected:Boolean = false;
<mx:Button label="Publish" click="publishItem()" enabled="{somethingSelected}" />
這是一個有益的嘗試。所有的依賴于DataGrid狀態的控件都綁定一個變量。改變變量的值就改變控件的enabled狀態。但是你還需要確定改變變量值的時機。比如:
private function publishItem() : void {
???? // get the selected item
???? // publish it
???? grid.selectedItem = -1; // clear the selection
???? somethingSelected = false;
}
在復雜的情況下,假設有另一個按鈕需要在選中某個特定值時被激活。那么你不僅需要考慮選中對應的那個變量,還需要考慮其他按鈕的情況。也就是說,在publishItem函數中你還需要設置其他變量的值。
一個更方便的做法是這樣的。現在我們Publish按鈕和somethingSelected變量進行綁定。我們還需要做的是把somethingSelected變量與DataGrid的選中狀態進行關聯。對此,我們可以使用<mx:Binding>標簽。
<mx:Binding source="grid.selectedIndex >= 0" destination="somethingSelected" />
這樣somethingSelected的值與DataGrid的選中狀態就緊密地聯系起來了。當選中了DataGrid中的某條數據時,所有進行enabled="{somethingSelected}"綁定的按鈕就被激活。<mx:Binding>標簽的source屬性不需要一定是一個變量,完全可以是一個表達式。
比如稍微復雜一點的一個例子:
<mx:Binding source="grid.selectedItem.code == 1" destination="codeOnePicked" />
這樣,當DataGrid選中行的code字段的值為1時,變量codeOnePicked的值被設置為true。
mxml中可以如下定義:
<mx:CheckBox label="Code One?" selected="{codeOnePicked}" />
<mx:Button label="Publish" enabled="{somethingSelected && !codeOnePicked}" />
這樣,當選中行的code字段值為1時,上面的復選框被激活,而下面的按鈕無效。