Combobox Extjs4组合框在网格中显示值

Combobox Extjs4组合框在网格中显示值,combobox,extjs4,Combobox,Extjs4,请帮忙。 我想在网格中显示我的displayValue。 我找到了解决方案,但我不明白如何使用它。我的代码: columns:[...,{ header: 'Product', id: 'combo', locked: true, dataIndex: 'prod_id', editor: { xtype: 'combobox', store: new Ext.data.Store({ fields:

请帮忙。 我想在网格中显示我的
displayValue
。 我找到了解决方案,但我不明白如何使用它。我的代码:

columns:[...,{
    header: 'Product',
    id: 'combo',
    locked: true,
    dataIndex: 'prod_id',
    editor: {
        xtype: 'combobox',
        store: new Ext.data.Store({
            fields: ['value','display'],
            data: prod_list
    }),
    displayField: 'display',
    valueField: 'value'
    }
},...]
解决方案 我试图在列数组之外定义编辑器

    var MyEditor = new Ext.form.field.ComboBox({
        store: new Ext.data.Store({
            fields: ['value','display'],
            data: prod_list
        }),
        displayField: 'display',
        valueField: 'value'
    });
一切都很好,但我无法编辑它。有什么问题? 对不起我的英语

var myStore = new Ext.data.Store({
    fields: ['value','display'],
    data: prod_list
});


您缺少一个celleditor插件

最好将渲染器定义为可重用对象,以便全局控制组合列的行为

因为您使用的是ExtJS4,所以我添加了一种替代方法来在单元格中显示组合编辑器的displayField,而不必在列的范围之外定义编辑器

首先定义渲染器:

Ext.ns("Ext.ux.util");

Ext.ux.util.ComboRenderer = function(val, metaData){
    var combo = metaData.column.getEditor();
    if(val && combo && combo.store && combo.displayField){
        var index = combo.store.findExact(combo.valueField, val);
        if(index >= 0){
            return combo.store.getAt(index).get(combo.displayField);
        }
    }
    return val;
};
  plugins: [
    {
      ptype: 'cellediting',
      clicksToEdit: 1
    }
  ]
然后给你的网格一个单元格编辑插件:

Ext.ns("Ext.ux.util");

Ext.ux.util.ComboRenderer = function(val, metaData){
    var combo = metaData.column.getEditor();
    if(val && combo && combo.store && combo.displayField){
        var index = combo.store.findExact(combo.valueField, val);
        if(index >= 0){
            return combo.store.getAt(index).get(combo.displayField);
        }
    }
    return val;
};
  plugins: [
    {
      ptype: 'cellediting',
      clicksToEdit: 1
    }
  ]
最后,将ComboRenderer指定给列的renderer属性,如下所示:

{
  header: 'Product',
  dataIndex: 'prod_id',
  renderer: Ext.ux.util.ComboRenderer,
  editor: {
    xtype: 'combo',
    store: new Ext.data.Store({
        fields: ['value','display'],
        data: prod_list
    })
  }
}

您可能应该将您的解决方案作为答案发布,然后接受它,这样stackoverflow就不会认为这个问题“未回答”。