Javascript 添加复选框,可以';找不到(';checkboxgroup';)

Javascript 添加复选框,可以';找不到(';checkboxgroup';),javascript,extjs,checkbox,Javascript,Extjs,Checkbox,我有一个如下定义的复选框组。(checkboxgroup在控制器中定义了一个“change”事件,我希望在这里它不重要。) 处理程序显示以下问题: 当尝试访问startItems复选框的checkbox.up('checkboxgroup')时,它们会得到checkboxgroup 当尝试访问checkbox.up('checkboxgroup')以添加复选框时,它们会得到未定义的 我做错了什么,或者我怎么可能得到正确的参考资料 Ext.define('MyApp.CheckItems',

我有一个如下定义的复选框组。(checkboxgroup在控制器中定义了一个“change”事件,我希望在这里它不重要。)

处理程序显示以下问题:

  • 当尝试访问startItems复选框的checkbox.up('checkboxgroup')时,它们会得到checkboxgroup
  • 当尝试访问checkbox.up('checkboxgroup')以添加复选框时,它们会得到
    未定义的
我做错了什么,或者我怎么可能得到正确的参考资料

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();
    }
}

您不能像那样直接修改items集合。这样做,您就绕过了一些代码,这些代码将设置新复选框的
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)));
    });
}