我有一个如下定义的复选框组。 (复选框组在控制器中定义了一个'更改事件,我希望此处不重要。)
处理程序显示以下问题:
undefined
。我做错了什么,或者我怎么可能得到正确的参考?
Ext.define('MyApp.CheckItems', {
extend : 'Ext.form.CheckboxGroup',
defaults : {
margin : "0 10 0 0"
},
...
handleUncheckOne:function(checkbox,checked) {
console.log(checkbox.up('checkboxgroup'));
// Output depends on whether it is a startItems checkbox one or a new one...
},
initComponent : function() {
var list = [{
xtype:'checkbox',
boxLabel: "All",
name: "#ALL#",
inputValue: "#ALL#",
checked : false,
handler: me.handleCheckAll
}];
Ext.each(startItems, function(entry, i) {
list.push( {
boxLabel : entry.label,
name : entry.name,
inputValue : entry.value,
checked : true,
handler : me.handleUncheckOne
});
});
Ext.applyIf(me, {
items : list
});
me.callParent(arguments);
},
addToList:function(names) {
var me = this;
var list = [];
Ext.each(names,function(entry) {
list.push(Ext.create('Ext.form.field.Checkbox',Ext.applyIf(Ext.clone(me.defaults),{
boxLabel : entry.label,
name : entry.name,
inputValue : entry.value,
checked : true,
handler : me.handleUncheckOne,
listeners : {
change: function() {
me.fireEvent("change") // Fire change event on checkboxgroup
}
}
})));
});
if(list.length>0) {
me.items.addAll(list);
me.doLayout();
}
}
答案 0 :(得分:2)
您无法像这样直接修改项目集合。这样做,您可以绕过一些设置新复选框的ownerCt
属性的代码,这解释了up
查询无效的原因。
您的代码应该是这样的:
addToList: function(names) {
var me = this; // hope this it the checkbox group
var list = [];
Ext.each(names, function(entry) {
// adding with the container's add method
me.add(new Ext.form.field.Checkbox(Ext.applyIf({
boxLabel : entry.label,
name : entry.name,
inputValue : entry.value,
checked : true,
handler : me.handleUncheckOne,
listeners : {
change: function() {
me.fireEvent("change") // Fire change event on checkboxgroup
}
}
}, me.defaults)));
});
}