动态创建复选框;在ExtJS中点击按钮不会被选中

Dynamically created check box doesn't get checked on button click in ExtJS

本文关键字:按钮 复选框 ExtJS 动态 创建      更新时间:2023-09-26
  1. 我在"创建复选框"按钮上动态地(基于条件(创建了一个复选框,并在面板中添加了这个复选框。

  2. 根据我的条件,面板中只会添加一个复选框,它的项目id将为"a1"。

  3. 当点击另一个按钮时,"checkedcheckbox"复选框应该被选中,但它没有。当我点击按钮上的itemid得到这个复选框时,它在开发人员工具中显示为未定义。如果我通过面板项目获得它,那么它不会显示未定义,但复选框不会选中。

问题

  1. 如果我是通过itemId获取的,为什么复选框显示未定义
  2. 如果我正在按面板项目获取,为什么不选中复选框。应该通过直接获取itemid和面板项来实现这两种方式

我在sencha fiddler的帐户上有一些问题,这就是为什么我可以为你创建一个fiddler。

代码

Ext.onReady(function () {
            var window = new Ext.Window({
                id: 'grdWindow',
                width: 400,
                height: 500,
                title: 'Grid Samples',
                items: [
                    {
                        xtype: 'button',
                        text: 'Create checkbox',
                        handler: function () {
                            var obj1 = [
                                { a: 1},
                                { a: 2},
                                { a: 3},
                                { a: 4}
                            ];
                            var obj2 = [
                                { a: 1 },
                                { a: 5 }
                            ];
                            var i = 1;
                            var panel = Ext.getCmp('pnlTesting');
                            Ext.each(obj1, function (ob1) {
                                Ext.each(obj2, function (ob2) {
                                    if (ob1.a == ob2.a) {
                                        panel.add({
                                            items:[
                                                {
                                                    xtype: 'checkbox',
                                                    itemId: 'a'+i
                                                }
                                                ]
                                        });
                                        return false;
                                    }
                                });
                            });
                        }
                    },
                    {
                        xtype: 'panel',
                        id: 'pnlTesting',
                        height: 100,
                        renderTo: Ext.getBody()
                    },
                    {
                        xtype: 'button',
                        text: 'checkedcheckbox',
                        handler: function () {
                            Ext.getCmp('pnlTesting').items.items[0].items.items[0].checked = true;
                            //Ext.getCmp("a1").checked = true;
                            //Ext.getCmp('pnlTesting').doLayout();
                        }
                    }
                ]
            }).show();
        });

我建议学习.up() .down() .prev().next().query() 的用法

它们是强大的工具,可以在对象结构中导航每个组件,而无需处理特殊的项ID。您还可以通过配置选项(如component.query('button[name="mybutton"]') (获取组件

我为你在sencha fiddle中的要求做了一个(非常(小的例子:https://fiddle.sencha.com/#fiddle/sii

问题是,如果要更改复选框的状态,应该使用setValue(true)而不是checked=true

{
    xtype: 'button',
    text: 'checkedcheckbox',
    handler: function (btn) {
        Ext.getCmp('pnlTesting').items.items[0].items.items[0].setValue(true);                          
    }
}

而且,这是一种获取组件的丑陋方式,我用down()和它的itemId 来获取它

Ext.getCmp('pnlTesting').down('#a1').setValue(true);

p.D:您应该改进这个选择器,因为使用idgetCmp()对于ExtJS来说不是一个好的做法。