Combobox Extjs4组合框在网格中显示值
请帮忙。 我想在网格中显示我的Combobox Extjs4组合框在网格中显示值,combobox,extjs4,Combobox,Extjs4,请帮忙。 我想在网格中显示我的displayValue。 我找到了解决方案,但我不明白如何使用它。我的代码: columns:[...,{ header: 'Product', id: 'combo', locked: true, dataIndex: 'prod_id', editor: { xtype: 'combobox', store: new Ext.data.Store({ fields:
displayValue
。
我找到了解决方案,但我不明白如何使用它。我的代码:
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'
}
},...]
解决方案
我试图在列数组之外定义编辑器
var MyEditor = new Ext.form.field.ComboBox({
store: new Ext.data.Store({
fields: ['value','display'],
data: prod_list
}),
displayField: 'display',
valueField: 'value'
});
一切都很好,但我无法编辑它。有什么问题?
对不起我的英语
var myStore = new Ext.data.Store({
fields: ['value','display'],
data: prod_list
});
您缺少一个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;
};
plugins: [
{
ptype: 'cellediting',
clicksToEdit: 1
}
]
然后给你的网格一个单元格编辑插件:
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;
};
plugins: [
{
ptype: 'cellediting',
clicksToEdit: 1
}
]
最后,将ComboRenderer指定给列的renderer属性,如下所示:
{
header: 'Product',
dataIndex: 'prod_id',
renderer: Ext.ux.util.ComboRenderer,
editor: {
xtype: 'combo',
store: new Ext.data.Store({
fields: ['value','display'],
data: prod_list
})
}
}
您可能应该将您的解决方案作为答案发布,然后接受它,这样stackoverflow就不会认为这个问题“未回答”。