问题描述
var MyCheckboxGroup=Ext.extend(Ext.form.CheckboxGroup,{ /** *@description 多少列显示数据 */ columns:3, fieldLabel: '元素类型', id:'ElementTypeID',name :'ElementTypeID',anchor:"95%",items:[{ xtype: 'checkbox', fieldLabel: 'Auto Layout' }//如果我这里没加这个组件的话,下面的roomType.items[0]与roomType.panel就会报undefined的错误 ]});var roomType = new MyCheckboxGroup();function getReceiveType(){var dataUrl = '/d9inn/receive.do?method=initReceiveType';Ext.Ajax.request({ url:dataUrl, success:function(response){ var result = Ext.decode(response.responseText); var data = result.msg; for(var i=0;i<data.length;i++){ var d=data[i]; alert(d.name+"------"+d.value);//我这里已经获取到了从后台传回的值了 var chk = new Ext.form.Checkbox({boxLabel: d.name,fieldLabel:"这是对的", inputValue: d.value}); roomType.items[0]=chk; //可是我这样添加时,页面上却没有显示出checkBox alert(roomType.items.length); } roomType.panel.doLayout(); } });} getReceiveType(); 该用什么方法把实例化好的checkBox组件添加到checkBoxGroup中去,先谢谢了 啊 问题补充:左手写爱丶 写道
解决方案
CheckboxGroup及RadioGroup是我个人觉得Ext中比较“恶心”的组件……它继承自Ext.form.Field,但又想表现为容器。它构造时,会将配置中的items及columns等拿来处理,生成一个对应的panel,这个处理只有一次。所以,基本上动态修改很难很难,并且容易出问题。给你的建议:1. 不使用CheckboxGroup,动态的东西用ListView或Grid比较合适,DataView也不错,简单易用。2. 实在想要CheckboxGroup的样式,可以试着动态创建CheckboxGroup,而不是动态添加子组件。相对来说要处理的东西就少很多了。(可以将组件改为容器,调用接口后请求数据,请求完毕先清空容器,再构造一个CheckboxGroup到容器内,并重新布局)