CheckboxGroup 在初始化时通过 items 配置项生成对应的面板,该过程仅执行一次,因此之后无法直接通过 add 方法动态加入新的 item。
如何解决?思路其实很简单:既然无法动态添加 item,那就重新创建整个 CheckboxGroup,并将新的 items 配置进去。换句话说,先准备好数据,一次性生成完整的 CheckboxGroup 实例,然后将其添加到目标容器中,最后调用 doLayout 刷新布局即可。
以下代码展示了一种典型的实现方式:首先根据数据源循环构建 unitColumns 数组,每个元素对应一组 checkbox 配置(包含 boxLabel、name、inputValue 等属性);然后新建一个 CheckboxGroup,将 unitColumns 赋值给 items;最后将其添加到父容器并调用 doLayout 刷新布局。
复制代码 代码如下:
var unitColumns=[];
for(var i = 0;i < records.length;i++){
unitColumns.push({
boxLabel: records[i].data.A11,
name: records[i].data.A11,
inputValue: records[i].data.A1,
checked: false
});
}
var itemsGroup = new Ext.form.CheckboxGroup({
id:'unitItems',
bodyStyle:'background-color: transparent;margin-top:10px;',
fieldLabel: '选项',
columns: 2,
items: unitColumns
});
Ext.getCmp('OptionsSet').add(itemsGroup);
Ext.getCmp('OptionsSet').doLayout();
关键步骤只有两步:一是构建 items 数组,二是调用 doLayout。许多初学者在添加后常常忘记调用 doLayout,导致界面没有任何变化,误以为添加失败。牢记这个细节,可以避免走弯路。
