首页 > 网站 > WEB开发 > 正文

7.7.用一个复选框渲染器选择DataGrid 列

2024-04-27 13:52:00
字体:
来源:转载
供稿:网友
7.7.1. 问题
我们需要创一个拥有一列CheckBox 的DataGrid,并且这个DataGrid 的表头也有一个CheckBox,当用户点击表头的CheckBox 时,这一列CheckBox 自动被选中或取消选中,我们这里所说的表头就是column 的headerRenderer。
7.7.2. 解决办法
创建一个类做为headerRenderer,并且在这个类里创建一个可以向它所在的DataGrid派发事件的方法,并且可以设置DataGrid 里所有itemRenderer 的属性。
7.7.3. 讨论
Flex 的header renderers 的创建与生命周期要比item renderers 复杂一些。在DataGrid 的生命周期里,任何与header 相关的动作都会引起headerRenderer 的重建。因此你需要在外部保存DataGrid 的状态。因此我们需要用ClassFactory。

在原文中,作者讲解了关于ClassFactory 的使用,这些我们己经在本章的第二节做过说明,所以这里就略过。
前边说了很多理论,下面我们说一下如何实现:
我们需要在mxml 里定义一些变量:
+展开
-ActionScript
// var to hold header renderer's state
public var selectAllFlag:Boolean;
[Bindable]
public var hr:ClassFactory;

selectAllFlag 变量,顾名思义,它用于表示是不是所有行都被选中了。hr 变量,是DataGridColumn 的hearerRenderer,并且被标记为[Bindable]。接下来要做的就是在mxml的creationComplete 方法里为hr 初始化:
+展开
-ActionScript
hr = new ClassFactory(CenteredCheckBoxHeaderRenderer);
hr.properties = {stateHost: this , stateProperty: "selectAllFlag" };

第一行创建了一个ClassFactory的实例,并且把我们自定义的renderer类赋值给factory的generator属性。在第二行赋值了两组key-value给hr的properties属性,renderer被创建后会用这两组key-value初始化。其中stateHost的value是“this”,它代表当前的mxml文件,stateProperty的value是我们在前边定义好的变量“selectAllFlag”的变量名。

下边我们看一下,如何为DataGridColumn指定刚刚创建的ClassFactory实例。
+展开
-XML
<mx:DataGridColumn width="30sortable="falsedataField="addToCartheaderRenderer="{hr}"
itemRenderer="CenteredCheckBoxItemRenderer" />
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表