Posted on 2007-03-08 22:58
云自无心水自闲 阅读(3596)
评论(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时,上面的复选框被激活,而下面的按钮无效。