我有一个包含几列的Grid-Panel。 现在我想在一行的列中设置一个新类,当值彼此不匹配时。 但是,如何才能在不同的行中获得成功? 她是我试过的代码,但它说,ID未定义:
...{
header: 'CRS',
dataIndex: 'crs',
id:'crs',
flex:1,
renderer: function(value, meta) {
console.log("csv-->"+Ext.getCmp('csv').value);
if(value==Ext.getCmp('csv').value)
{
//change class
}
}
},
{
header: 'CSV',
dataIndex: 'csv',
id:'csv',
flex:1
},...
答案 0 :(得分:2)
您发布的代码似乎与您要求的代码不符。根据您的代码,出现您尝试比较同一行中列的值,而不是另一行。那是什么?
无论如何,假设您的代码表明您想要的内容,请务必查看渲染器的文档:http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.grid.column.Column-cfg-renderer
传递给渲染器方法的参数之一是“记录”,它将包含记录的所有值,这些值填充整行的值。如果您想比较各列的值,可以执行以下操作:
if( value==record.get( 'csv ') ) {
...do something here...
}
如果您确实需要比较行中的值,那么“store”也会作为渲染器的参数之一传递,因此您可以将值与特定行值进行比较。
或者,您可以在模型本身中完成大部分操作。如果您只是比较同一行中的列,则可以在模型中创建一个存储比较结果的附加字段。如果你这样做,你的渲染器需要做的就是切换那个新字段的值,而不是进行整个比较和渲染。
答案 1 :(得分:1)
我拥有它!这对我有用:
{
header: 'CSV',
dataIndex: 'csv',
flex:1,
renderer: function(grid, rowIndex, rowdata) {
var csv_data=rowdata.data.csv;
var crs_data=rowdata.data.crs;
if (csv_data != crs_data) {
rowIndex.tdCls = "red-class";
}
return csv_data;
}
},
答案 2 :(得分:0)
{
header: 'CSV',
dataIndex: 'csv',
flex:1,
renderer: function(value, meta, record) {
var crs = record.get('crs');
if (value && crs)
{
if (value != crs) {
meta.tdCls = "red-class";
}
}
return value;
}
},
为ExtJS 4重写,您可以在dataIndex中设置它时使用该值,因为这是一个记录,推荐的extjs 4获取值的方法是get方法。
在渲染器上有更多属性,您可以在此处找到完整列表: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.grid.column.Column-cfg-renderer