添加了复选框,可以查找('复选框组')

时间:2014-07-29 11:03:57

标签: javascript extjs checkbox

我有一个如下定义的复选框组。 (复选框组在控制器中定义了一个'更改事件,我希望此处不重要。)

处理程序显示以下问题:

  • 当尝试访问checkbox.up(' checkboxgroup')for startItems复选框时,他们会获得复选框组。
  • 尝试访问checkbox.up(' checkboxgroup')以获取添加的复选框时,他们会获得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();
    }
}

1 个答案:

答案 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)));
    });
}