我有一个使用商店的可编辑网格。我想在其中一个字段中插入一个组合框。 这是我的网格商店:
new Ext.data.Store({ ....
proxy: new Ext.data.HttpProxy......
reader: new Ext.data.JsonReader({
root: 'rows',
fields: [..... {name:'wid', mapping: 'wid'},
还有另一个仅用于组合框的商店,它有'wid'和'name'字段。 在我的专栏模型中:
header: 'Worker',
dataIndex: 'wid',
editor: new Ext.grid.GridEditor(workerCmb),
renderer:function(value, p, record){
return record.data['name'];}
和组合本身:
valueField: 'wid',
displayField: 'name',
当网格加载时,其字段“Worker”为空(没关系),但其中没有组合框。当我开始编辑它时,我看到所有列表。编辑完成后,“id”会保存到商店,但不会显示“名称”,组合框也不会显示。 我做错了什么?
答案 0 :(得分:2)
这有助于:
Ext.util.Format.comboRenderer = function(combo){
return function(value){
var record = combo.findRecord(combo.valueField || combo.displayField, value);
return record ? record.get(combo.displayField) : combo.valueNotFoundText;
}
}
答案 1 :(得分:1)
如果在组合框中启用过滤('queryMode = local'),请记住,您输入的每个字母都会应用于商店。因此,函数findRecord将无法找到过滤掉的显示名称。这将影响您在同一网格中的其他行,因为在您完成编辑后,整个网格视图将刷新。
为了确保在循环启动时没有丢失任何记录,请在尝试查找记录之前从组合框存储中删除过滤器。
Ext.util.Format.comboRenderer = function(combo){
return function(value){
combo.store.clearFilter(); // -> addition
var record = combo.findRecord(combo.valueField || combo.displayField, value);
return record ? record.get(combo.displayField) : combo.valueNotFoundText;
}
}