我在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'
,因此我可以只编辑该列单元格。
我遇到的问题是当我按下&#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
出现问题,我更新记录后没有更新值。
关于如何解决这个问题的任何线索?
感谢。
答案 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());