请帮忙。
我想在网格中显示我的displayValue
。
我找到了解决方案here,但我无法理解如何使用它。我的代码:
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'
}
},...]
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;
}
}
{
header: 'Товар',
id: 'combo',
locked: true,
dataIndex: 'prod_id',
editor: MyEditor,
renderer: Ext.util.Format.comboRenderer(MyEditor)
}
我尝试在列数组之外定义编辑器。
var MyEditor = new Ext.form.field.ComboBox({
store: new Ext.data.Store({
fields: ['value','display'],
data: prod_list
}),
displayField: 'display',
valueField: 'value'
});
抱歉我的英文。
答案 0 :(得分:12)
var myStore = new Ext.data.Store({
fields: ['value','display'],
data: prod_list
});
...
editor: {
xtype: 'combobox',
store: myStore,
displayField: 'display',
valueField: 'value'
},
renderer: function(val){
index = myStore.findExact('value',val);
if (index != -1){
rs = myStore.getAt(index).data;
return rs.display;
}
}
答案 1 :(得分:1)
您缺少 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;
};
然后为您的网格添加一个cellediting插件:
plugins: [
{
ptype: 'cellediting',
clicksToEdit: 1
}
]
最后,将ComboRenderer指定给列的渲染器属性,如下所示:
{
header: 'Product',
dataIndex: 'prod_id',
renderer: Ext.ux.util.ComboRenderer,
editor: {
xtype: 'combo',
store: new Ext.data.Store({
fields: ['value','display'],
data: prod_list
})
}
}