Extjs 网格单元渲染错误
我在我的应用程序中使用ExtJs,我有一个网格,它有一个唯一的列。这个列有一个编辑器,它是一个组合框,所以当我在网格单元格中单击时,会显示一个组合框。但是,当我单击编辑网格单元值时,对象的名称可见,但当我在单元外单击时,在网格中渲染的值是对象的id 当我选择项目时: 当我在组合框外单击时:Extjs 网格单元渲染错误,extjs,Extjs,我在我的应用程序中使用ExtJs,我有一个网格,它有一个唯一的列。这个列有一个编辑器,它是一个组合框,所以当我在网格单元格中单击时,会显示一个组合框。但是,当我单击编辑网格单元值时,对象的名称可见,但当我在单元外单击时,在网格中渲染的值是对象的id 当我选择项目时: 当我在组合框外单击时: var names = Ext.create('Ext.data.Store', { fields: ['id', 'name'], data : [ {"id":"1",
var names = Ext.create('Ext.data.Store', {
fields: ['id', 'name'],
data : [
{"id":"1", "name":"Bart"},
{"id":"2", "name":"Homer"},
{"id":"3", "name":"Marge"},
{"id":"4", "name":"Lisa"}
]
});
我的代码:
Ext.define('ComboBoxDoenca', {
extend : 'Ext.form.ComboBox',
displayField: 'nome',
editable: false,
width: 300,
valueField: 'id',
listeners:{
render: function(combo){
combo.store = Ext.create('ComboStore').load();
}
}
}))
网格代码:
Ext.define('GridDoenca', {
extend : 'Ext.grid.Panel',
title: 'Doenças',
alias : 'widget.doencaList',
id: 'gridDoenca',
height: 150,
plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
})],
initComponent : function() {
var comboDoenca = Ext.create('Hemisphere.view.fungicida.ComboBoxDoenca');
me = this;
Ext.apply(this, {
dockedItems : [ {
xtype : 'toolbar',
dock : 'top',
items : [ {
text : 'Add Doença',
icon : Webapp.icon('add1.png'),
iconAlign : 'top',
action : 'addDoenca'
}]
} ]
});
this.columns = [ {
header : 'ID',
dataIndex : 'id',
hidden: true
},{
header : 'Doença',
dataIndex : 'id',
editor: comboDoenca,
flex: 1
}];
this.callParent(arguments);
}
}))
任何人都可以帮助我???嗯,网格列显示分配给它的实际值。这意味着在内部,数据被完美地分配 问题是您不希望看到id值,而是希望看到它更友好的表示形式。这可以通过渲染器功能解决 请看一下我的例子: 我已将我的数据存储定义如下:
Ext.create('Ext.data.Store', {
storeId:'simpsonsStore',
fields:['name', 'email', 'phone'],
data: [
{"name":"1", "email":"lisa@simpsons.com", "phone":"555-111-1224"},
{"name":"2", "email":"bart@simpsons.com", "phone":"555-222-1234"},
{"name":"3", "email":"home@simpsons.com", "phone":"555-222-1244"},
{"name":"4", "email":"marge@simpsons.com", "phone":"555-222-1254"}
]
});
这是我的组合框的名称存储:
var names = Ext.create('Ext.data.Store', {
fields: ['id', 'name'],
data : [
{"id":"1", "name":"Bart"},
{"id":"2", "name":"Homer"},
{"id":"3", "name":"Marge"},
{"id":"4", "name":"Lisa"}
]
});
正如您在第一家商店中看到的,“name”字段包含一个id,但是,当然,我不想看到那些数字,我想看到Bart、Homer、Marge或Lisa
然后,在renderer函数中,我转换名称中的ID以显示它们
renderer: function(value) {
var idx = names.find('id', value)
var rec = names.getAt(idx);
return rec.get('name');
}
我希望这就是您要查找的内容。这样,我需要刷新包含名称的商店,并在我的应用程序中添加新的Doenca,对吗?因为我的组合是通过数据库中的请求填充的。这不是解决方案,而是总体思路。如果必须存储ID,则需要一种机制来显示ID所代表的正确Doenca。你必须使用你喜欢的技术来使用渲染器功能。这不起作用,因为当网格是渲染器时,我没有这个值,网格行可以通过一个按钮动态添加。当网格是渲染器时,它没有任何行。您必须具有要在某处显示的值。事实上,你在combobox的商店里有,对吧?是的,我在你的帮助下解决了这个问题,我用我唯一的商店找到了唱片,谢谢。