项目中遇到一个问题,动态添加checkgroup,总是添加不上去,总是会跳出一个问题。
Panel.form.findField('permission').add(items) 无法获取属性“nextSibling”的值: 对象为 null 或未定义。但是在extjs4.0.2版本下是没有问题的。
         var Panel = new Ext.form.FormPanel({
            bodyStyle: 'position:relative;padding: 5px 5px;',            defaults: {
                xtype: 'textfield',
                allowBlank: false,
                fieldWidth: 60
            },
            items: [{
                name: 'user_id',
                readOnly: user_id == undefined ? false : true,
                fieldLabel: '用户登录名'
            }, {
                name: 'user_name',
                fieldLabel: '用户姓名'
            }, {
                hidden: user_id == undefined ? false : true,
                name: 'password',
                fieldLabel: '密码',
                inputType: 'password'
            }, {
                hidden: user_id == undefined ? false : true,
                name: 'confirm',
                fieldLabel: '确认密码',
                inputType: 'password'
            }, {
                xtype: 'checkboxgroup',
                name: 'permission',                frame: true,
                columns: 3,
                allowBlank: true,
                fieldLabel: '可用权限'
            }],
            buttons: {
                text: "确定",
                tabIndex: 1,
                iconCls: 'save',
                handler: onSaveUser
            }, {
                text: "取消",
                tabIndex: 2,
                iconCls: 'close',
                handler: function () {
                    win.close();
                }
            }]
        });        if (user_id) {            Ext.Ajax.request({
                url: 'core/WebService.asmx/LoadUserByID',
                headers: {
                    'Content-Type': 'application/json; charset=utf-8'
                },
                method: 'POST',
                jsonData: {
                    user_id: user_id
                },
                success: function (response) {
                    var data = Ext.JSON.decode(response.responseText).d;
                    Panel.form.findField('user_id').setValue(user_id);
                    Panel.form.findField('user_name').setValue(data.user_name);
                    Panel.form.findField('password').setValue(data.password);
                    Panel.form.findField('confirm').setValue(data.password);
                   
                    var items = initPermission(data.permission);                    userPanel.form.findField('permission').add(items);
                    if (data.is_manager) {
                        Panel.form.findField('permission').setVisible(false);
                        return;
                    }
                }
            });
        }
        else {            var items = initPermission("");            debugger;
            userPanel.form.findField('permission').add(items);
        }
        function initPermission(perms) {
            var items = new Array();
            if (perms == null) perms = "";
            var pms = perms.split(',');            Ext.each(permission, function (m) {                var checked = false;
                for (var i = 0; i < pms.length; i++) {
                    if (Number(pms[i]) == m.permission_id) {
                        checked = true;
                        break;
                    }
                }
                //有子部门的才能显示那些type=1的权限
                if (m.type == 0 || (m.type == 1 && has_child))
                    items.push({ boxLabel: m.permission_desc, inputValue: m.permission_id, checked: checked });
            });            return items;        }

解决方案 »

  1.   

    findField( String id ) : Ext.form.field.Field你没有定义ID吧。
      

  2.   

    感觉你的代码有点乱, ar items = initPermission(data.permission); v这句可以成功取到items的值吗?另外你的function initPermission(perms)这个function写的是不是有问题,它没有返回任何值呀?
      

  3.   

    楼主这个问题解决了没有?我也碰到了,好像这个问题只有在IE中才会出现,别的浏览器都正常,估计是ExtJS4.1的一个BUG吧