EXTJS4:将GridPanel中的两个字段相互比较

时间:2013-09-05 08:07:50

标签: extjs grid extjs4 extjs4.1 extjs4.2

我有一个包含几列的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
},...

3 个答案:

答案 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