ExtJS如何在组合编辑器选择后强制在网格行上渲染

时间:2014-09-14 17:49:23

标签: extjs extjs4 extjs4.1 extjs4.2 extjs-mvc

我在ExtJS 4.2.1应用程序中有一个网格,其中包含以下可编辑列:

text: 'Location',
    dataIndex: 'LocationId',
    width: 140,
    renderer: function(value) {
        var record = me.store.findRecord('LocationId', value);
        return record.get('Description');
    },
    editor: {
        xtype: 'combobox',
        typeAhead: true,
        triggerAction: 'all',
        store: Ext.create('App.store.catalog.Location', {
            autoLoad: true
        }),
        displayField: 'Description',
        valueField: 'LocationId',
        listConfig: {
            width: 250,
            loadingText: 'Searching...',
            // Custom rendering template for each item
            getInnerTpl: function() {
                return '<b>{Code}</b><br/>(<span style="font-size:0.8em;">{Description}</span>)';
            }
        }
    }

组合使用renderer来显示所选LocationId的说明。

然后,我的网格具有功能'Ext.grid.plugin.CellEditing',因此我可以只编辑该列单元格。

enter image description here

我遇到的问题是当我按下&#34; Update&#34;按钮,即使记录中的LocationId具有正确的值,组合显示值也会返回到原来的原始值。

这是我的代码,当用户按下&#34;更新&#34;按钮。

me.rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
    clicksToMoveEditor: 1,
    autoCancel: false,
    listeners: {
        edit: function(editor, e) {
            var record = e.record;

            me.setLoading('Updating...');

            App.util.Ajax.request({
                noMask: true,
                url: '/api/catalog/UpdateEmployeeLocation',
                jsonData: record.getData(),
                success: function(response, opts) {

                    var obj = Ext.decode(response.responseText);
                    if (obj.success) {

                        // commit changes (no save just clear the dirty icon)
                        me.getStore().commitChanges();
                    }
                },
                callback: function() {
                    me.setLoading(false);
                }
            });

        }
    }
});

记录在我的数据库中正确保存,但组合显示值未使用与LocationId对应的说明进行更新。如果我再次从服务器重新加载商店,那么它显示正确。

  

因此,我的列中renderer出现问题,我更新记录后没有更新值。

关于如何解决这个问题的任何线索?

感谢。

1 个答案:

答案 0 :(得分:0)

您正在将dataIndex设置为&#39; LocationId&#39;但是,如果您要更改“LocationId”,则只需更改说明并在渲染方法中进行更新即可。由于“LocationId”没有变化,因此商店不会将其视为脏字段,因此不会调用渲染函数。一种快速而肮脏的方式可能是使用&#39; LocationId&#39;,在模型中创建另一个字段,例如“LocationIdchangeTraker”&#39;。使用&#39; LocationIdchangeTraker&#39;而不是&#39; LocationId&#39;在数据索引中。它不会影响您的视图,因为您正在更改reneerer函数中的值。现在,每当您更新函数时,都会更改&#39; LocationIdchangeTraker&#39;如下所示。

  

record.set(&#39; LocationIdchangeTraker&#39;,Ext.getId());