云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

数据绑定的小技巧 Flex Data Binding Tip

Posted on 2007-03-08 22:58 云自无心水自闲 阅读(3596) 评论(0)  编辑  收藏 所属分类: FlexFlex2

 

现在有一个方便的做法来根据选择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时,上面的复选框被激活,而下面的按钮无效。




只有注册用户登录后才能发表评论。


网站导航: