ExtJS - EditorGridPanel:选择单元格时出错

时间:2011-06-17 19:56:11

标签: extjs combobox grid

我在 EditorGridPanel 中选择单元格时出错。这是我的代码片段:

var bannerGrid = new Ext.grid.EditorGridPanel({
    store: bannerStore,             
    cm: new Ext.grid.ColumnModel({
        defaults: {
            sortable: true,
            menuDisabled: true
        },
        columns:
            { 
                header: '<img src="img/oo-icon.png" />&nbsp;<img src="img/network-icon.png" />', 
                width: 52, 
                dataIndex: 'inventory', 
                align: 'center',
                renderer: inventoryIcon,
            }, { 
                header: "Name", 
                dataIndex: 'bannerName',
                editor: new Ext.form.TextField({ allowBlank: false }),
                width: 300
            }, { 
                header: "Advertiser", 
                dataIndex: 'advertiser',
                editor: advertisersDropdownGrid,
            }, { 
                header: "Art Type", 
                dataIndex: 'artType',
                editor: artTypeDropdownGrid,
            }, {
        ......

每个编辑&#39;是在网格之前定义的下拉列表。奇怪的是,包含 TextField 的编辑器不会抛出相同的错误。

选择单元格时我遇到的错误是:

c.getItemCt() is undefined
[Break On This Error] c.getItemCt().removeClass('x-hide-' + c.hideMode); 

同样,这只发生在ComboBox编辑器上!

从进一步的检查中,错误来自分机本身的这一部分:

onFieldShow: function(c){
c.getItemCt().removeClass('x-hide-' + c.hideMode);
    if (c.isComposite) {
        c.doLayout();
    }
}, 

这似乎是 FormLayout 部分的一部分。

有什么想法吗?我尝试过定义Combo的内联,但没有修复它。

谢谢!

编辑:以下是我如何使用课程定义我的组合。

我定义了我的ComboBoxJSON类:(为了隐私,我已经删除了命名空间)

***.***.***.ComboBoxJSON = Ext.extend(Ext.form.ComboBox, {

    url: '',
    root: '',
    valueField: 'id',
    displayField: 'name',
    width: 200,
    id: '',
    fields: [
        { name: 'id', type: 'int'}, 
        { name: 'name', type: 'string' }
    ],


    initComponent: function () {

        var comboStore = new Ext.data.JsonStore({
               id: 'JsonStore',
               idProperty: 'id',
               autoLoad: true,
               idProperty: 'id',
               root: this.root,
               fields: this.fields,
               proxy: new Ext.data.ScriptTagProxy({
                   api: {
                       read: this.url,
                   }
               })
           });  

        var config = {
            store: comboStore,
            displayField: this.displayField,
            valueField: this.valueField,
            mode: 'local',
            minChars: 1,
            triggerAction: 'all',
            typeAhead: true,
            lazyRender: true,
            value: this.value,
            width: this.width,
            id: this.id
        }

        Ext.apply(this, config);

        ***.***.***.ComboBoxJSON.superclass.initComponent(this);

    }
});

Ext.reg("ibwComboJson", ***.***.***.ComboBoxJSON);

然后我在网格上的init之前定义我的组合,就像这样:(我已经阻止了URL,但确实返回了有效的JSON)

var advertisersDropdownGrid = new ***.***.***.ComboBoxJSON({
    url: '***',
    root: 'advertiserList',
    id: 'advertisersDropdownGrid'           
});

1 个答案:

答案 0 :(得分:0)

回过头来找到答案,但解决方案非常简单。

***.***.***.ComboBoxJSON.superclass.initComponent.call(this);

忘记了.call部分。 :)