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