Getting Error as getEditor undefined



我正在尝试使用以下网格中的单元格值。实际上,我只是想在控制台

中打印它
console.log(Ext.ComponentQuery.query('gridcolumn[itemId=gridId]')[0].getEditor().getStore().findRecord('description', 'Description'));

网格代码

Ext.define('Examples.grid.fdGrid', {
    extend: 'Ext.grid.Panel',
    xtype: foodGrid',
    forceNewStore: true,
    itemId: 'foodGrid',
    height: Ext.getBody().getViewSize().height - 200,
    autoload: false,
    columns: [
    {
            text: 'Food Distrib',
            xtype: 'gridcolumn',
            itemId:'gridId', 
            dataIndex: 'food_distributor',
            flex: 1,
            renderer: function(value){
            if(Ext.isNumber(value)){
                var store = this.getEditor().getStore();
                return store.findRecord('foodid',value).get('description');
            }
            return value;
            },
            editor: {
                xtype: 'combobox',
                allowBlank: true,
                displayField: "description",
                valueField: "foodid",                      
                listeners: {
                    expand: function () {
                        var call = this.up('foodgrid[itemId=foodGrid]').getSelectionModel().selection.record.data.networkname.trim();
                        this.store.clearFilter();
                        this.store.filter({
                            property: 'call',
                            value: call,
                            exactMatch: true
                        })
                    }
                },
            },
        }
        });

,但我遇到了一个错误,例如Uncaught TypeError: Cannot read property 'getEditor' of undefined

请问有什么错误?

添加了网格代码部分和我要打印的值的列。

需要在需要时创建编辑器(当第一个编辑发生时)。因此,当渲染器首先被调用时,编辑器尚未可用。

您想从渲染器内部做的是直接访问商店,而不是通过编辑器。然后,您只需要一个预加载的商店即可正确渲染网格。

    renderer: function(value){
        if(Ext.isNumber(value)){
            var store =Ext.getStore("MyStore");
            return store.findRecord('foodid',value).get('description');
        }
        return value;
    },
    editor: {
        xtype:'combobox',
        store:'MyStore'

当然,您必须确保在渲染网格之前加载MyStore

一个人只能猜测您要在那里做什么,但是:

  • Column没有自身的选择模型。Grid做。
  • Combobox需要一家商店。
  • getEditor可能返回StringObject如果设置了编辑器,并且列为editable
  • editable由网格插件提供。换句话说,将列指定为可编辑并指定列编辑器还不够,您还需要为网格提供可编辑的插件。

一些有效的示例:

Ext.define('Examples.grid.fdGrid', {
extend: 'Ext.grid.Panel',
xtype: 'feedGrid',
forceNewStore: true,
itemId: 'foodGrid',
height: Ext.getBody().getViewSize().height - 200,
autoload: false,
 selModel: 'cellmodel',
plugins: {
    ptype: 'cellediting',
    clicksToEdit: 1
},
columns: [
{
        text: 'Food Distrib',
        xtype: 'gridcolumn',
        itemId:'gridId', 
        dataIndex: 'food_distributor',
        flex: 1,
        editable: true,
        renderer: function(value){
        if(Ext.isNumber(value)){
            var store = this.getEditor().getStore();
            return store.findRecord('foodid',value).get('description');
        }
        return value;
        },
        editor: {
            xtype: 'combobox',
            allowBlank: true,
            displayField: "description",
            valueField: "foodid",    
            store: {
                fields:['food_distributor', 'description'],
                data:[
                    {
                        'food_distributor':'a',
                        foodid:1,
                        description:'aaaaa'
                    },
                    {
                        'food_distributor':'a',
                        foodid:2,
                        description:'bbbbbb'
                    },
                    {
                        'food_distributor':'a',
                        foodid:3,
                        description:'aaaaa'
                    }]
            },
            listeners: {
                expand: function () {
                    debugger;
                    var desc = this.up('grid').getSelectionModel().getSelection()[0].get('description').trim();
                    this.store.clearFilter();
                    this.store.filter({
                        property: 'description',
                        value: desc,
                        exactMatch: true
                    })
                }
            },
        },
    }
    ]
});
Ext.create('Examples.grid.fdGrid', {
    store: {
        fields:['food_distributor', 'description'],
        data:[
            {
                'food_distributor':'a',
                foodid:1,
                description:'aaaaa'
            },
            {
                'food_distributor':'a',
                foodid:2,
                description:'bbbbbb'
            },
            {
                'food_distributor':'a',
                foodid:3,
                description:'aaaaa'
            }]
    },
    renderTo:Ext.getBody()
})

你有

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
              clicksToEdit: 1
});

没有插件,编辑器无效!当您尝试获取

时,编辑器将不确定。

最新更新