ExtJS - EditorGridPanel: ошибка при выделении ячейки - PullRequest
1 голос
/ 17 июня 2011

Я получаю сообщение об ошибке при выборе ячеек в моем 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,
            }, {
        ......

Каждый из «редакторов» - это выпадающие списки, которые определены до сетки. Странно то, что редактор, содержащий TextField , не выдает ту же ошибку.

Я получаю ошибку при выборе ячейки:

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

Опять же, это происходит только в редакторах ComboBox!

Из дальнейшего осмотра ошибка исходит от этой части самого ext:

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 голосов
/ 02 сентября 2011

Нашли ответ на это некоторое время назад, но решение довольно нелепо просто.

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

Забыл часть .call.:)

...