Extjs 如何设置组合框项';id';在“选择”按钮上转到网格中的另一列?

Extjs 如何设置组合框项';id';在“选择”按钮上转到网格中的另一列?,extjs,extjs4,Extjs,Extjs4,我们在模型中存储了如下字段: fields: ["name_id", "name"] me.columns = [ { header:"Name", dataIndex:"name_id", hide: true }, { header:"Name", dataIndex:"name", xtype: 'combocolumn', editor: {

我们在模型中存储了如下字段:

fields: ["name_id", "name"]
me.columns = [
    {
       header:"Name", 
       dataIndex:"name_id", 
       hide: true
    },
    {
       header:"Name", 
       dataIndex:"name", 
       xtype: 'combocolumn',
       editor: {
          xtype:'NameCombo',
          dataIndex:"name_id"
       },
       filter: true
    },
]
我们有如下列的网格:

fields: ["name_id", "name"]
me.columns = [
    {
       header:"Name", 
       dataIndex:"name_id", 
       hide: true
    },
    {
       header:"Name", 
       dataIndex:"name", 
       xtype: 'combocolumn',
       editor: {
          xtype:'NameCombo',
          dataIndex:"name_id"
       },
       filter: true
    },
]
其中xtype NameCombo定义为:

Ext.define("NameCombo",{
    extend: "Ext.form.ComboBox",

    triggerAction: 'all',
    displayField: 'name', 
    valueField: 'id',
    lazyRender: true,
    editable: false,
    store: "Store",
    alias: ['widget.NameCombo'],
});

谁能告诉我,如何将组合框项“id”设置为另一列,我在配置中通过NameCombo中的“dataIndex:“name\u id”设置了该列?

我有一个解决方案

如果我们更改NameCombo小部件,如下所示,我们可以将“id”设置为记录的另一个字段

Ext.define("NameCombo",{
    extend: "Ext.form.ComboBox",

    displayField: 'name', 
    valueField: 'name',
    keyField: 'id',

    triggerAction: 'all',
    lazyRender: true,
    editable: false,
    store: "Store",
    alias: ['widget.NameCombo'],

    initComponent: function(){
        var me = this;

        me.listeners = {
            select: me.itemChanged
        };

        this.callParent();
    },

    itemChanged: function(combo, records, eOpts)
    {
        var me = this;

        Ext.Array.each(records, function(record) {
            if (me.dataIndex) {
                var grid = me.scope;
                var sm = grid.getSelectionModel();
                var lastRow = sm.getLastSelected();                 
                var columns = me.scope.columns,
                    i, columnsLength, column;           
                var id = record.data[me.keyField];

                lastRow.set(me.dataIndex,id);

                //TODO: Is there any simple way to update the value in the column of the grid?
                for (i = 0, columnsLength = columns.length; i < columnsLength; i++) {
                    column = columns[i];
                    if (column.dataIndex === me.dataIndex) {
                        column.getEditor().setValue(id);
                    }
                }
            }
        })

});
Ext.define(“NameCombo”{
扩展:“Ext.form.ComboBox”,
displayField:'名称',
valueField:'名称',
关键字字段:“id”,
触发动作:“全部”,
lazyRender:是的,
可编辑:false,
商店:“商店”,
别名:['widget.NameCombo'],
initComponent:function(){
var me=这个;
me.listeners={
选择:me.itemChanged
};
这是callParent();
},
itemChanged:函数(组合、记录、EOPT)
{
var me=这个;
Ext.Array.each(记录、函数(记录){
if(me.dataIndex){
var grid=me.scope;
var sm=grid.getSelectionModel();
var lastRow=sm.getLastSelected();
var columns=me.scope.columns,
i、 柱长度,柱;
var id=record.data[me.keyField];
set(me.dataIndex,id);
//TODO:有没有简单的方法来更新网格列中的值?
对于(i=0,columnsLength=columns.length;i
还有更好的解决办法吗