Extjs 获取错误,因为getEditor未定义

Extjs 获取错误,因为getEditor未定义,extjs,combobox,Extjs,Combobox,我正试图用下面的公式得到网格中一个单元格的值。事实上,我只是想在控制台上打印出来 console.log(Ext.ComponentQuery.query('gridcolumn[itemId=gridId]')[0].getEditor().getStore().findRecord('description', 'Description')); 网格代码 Ext.define('Examples.grid.fdGrid', { extend: 'Ext.grid.Panel',

我正试图用下面的公式得到网格中一个单元格的值。事实上,我只是想在控制台上打印出来

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
                        })
                    }
                },

            },
        }
        });
但是我得到了一个错误,
uncaughttypeerror:无法读取未定义的属性“getEditor”

请问是什么错误


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

编辑器在需要时创建(第一次编辑时)。因此,当第一次调用渲染器时,编辑器还不可用

要从渲染器内部执行的操作是直接访问存储,而不是通过编辑器。然后,您只需要一个预加载的存储就可以正确渲染网格

    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

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

没有插件,编辑器就不能工作!当您试图获取编辑器时,该编辑器将是未定义的

人们只能猜测您试图在那里做什么,但是:

  • 本身没有选择模型<代码>网格执行
  • Combobox
    需要一个商店
  • getEditor
    可以返回
    String
    Object
    ,前提是设置了编辑器并且列是
    可编辑的
  • 可编辑
    由网格插件提供。换句话说,仅将列指定为可编辑并指定列编辑器是不够的,还需要为网格提供可编辑插件
一些工作示例:

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()
})

你能分享你的网格代码吗
Ext.ComponentQuery.query('gridcolumn[itemId=foodDistrib]')[0]
正在返回未定义。您的查询不正确。我认为如果它不支持getEditor(),请尝试使用此.editor对象您正在使用
itemId=foodDistrib
,但我在任何地方都没有看到这样的ID,您应该使用
(“#gridId”)
,您的列中有此ID。@pagep
错误:“Ext.data.Model#persistenceProperty”已弃用。
新外部错误(http://localhost:3000/scripts/ext-classic/ext all debug.js:2555:21)
位于Function.raise(http://localhost:3000/scripts/ext-classic/ext all debug.js:2614:23)
位于Object.ext.raise(http://localhost:3000/scripts/ext-classic/ext all debug.js:2693:21)
位于constructor.get(http://localhost:3000/scripts/ext-classic/ext all debug.js:11083:29)
位于constructor.remoteFunction(:2:14)
但是我正在远程加载存储,我不必在这里创建它,对吗??