You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExtJS多列表格单元格颜色修改问题:name列样式无法生效

解决ExtJS表格Name列颜色不生效的问题

我看了你的代码,发现两个关键问题导致Name列的颜色设置没生效,咱们一步步来修复:

问题1:变量名错误

你在判断Name的时候写了if (name == 'GIO'),但你定义的变量是c(var c = record.get('name');),这里应该用c来判断,不然JS会把name当成未定义的变量,条件永远不成立。

问题2:函数提前终止,后续代码无法执行

在getRowClass里,你处理change字段的时候,不管是c < 0还是c > 0都直接return了函数,这会导致后面处理Name的代码永远不会被执行到。哪怕change等于0,后面的代码虽然能执行,但逻辑上你应该把两种条件的class结合起来,或者调整判断顺序。

修正后的代码示例

这里提供两种方案,你可以根据需求选择:

方案1:同时应用change和name的样式(合并class)

如果想让行同时拥有change和name对应的样式,可以把两个class拼接返回:

Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [{
        header: 'Name',
        dataIndex: 'name'
    }, {
        header: 'Email',
        dataIndex: 'email',
        flex: 1
    }, {
        header: 'Change',
        dataIndex: 'change',
        tdCls: 'x-change-cell'
    }],
    height: 200,
    width: 400,
    viewConfig: {
        getRowClass: function(record, index) {
            var rowClasses = [];
            // 处理change对应的样式
            var changeVal = record.get('change');
            if (changeVal < 0) {
                rowClasses.push('price-fall');
            } else if (changeVal > 0) {
                rowClasses.push('price-rise');
            }
            // 处理name对应的样式
            var nameVal = record.get('name');
            if (nameVal === 'GIO') {
                rowClasses.push('color-gio');
            } else {
                rowClasses.push('color-other');
            }
            // 返回拼接后的class字符串
            return rowClasses.join(' ');
        }
    },
    renderTo: Ext.getBody()
});

方案2:优先按name设置样式,再考虑change(根据优先级选择)

如果name的样式优先级更高,可以先判断name,再处理change:

Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [{
        header: 'Name',
        dataIndex: 'name'
    }, {
        header: 'Email',
        dataIndex: 'email',
        flex: 1
    }, {
        header: 'Change',
        dataIndex: 'change',
        tdCls: 'x-change-cell'
    }],
    height: 200,
    width: 400,
    viewConfig: {
        getRowClass: function(record, index) {
            var nameVal = record.get('name');
            if (nameVal === 'GIO') {
                return 'color-gio';
            }
            // 如果不是GIO,再处理change的样式
            var changeVal = record.get('change');
            if (changeVal < 0) {
                return 'price-fall';
            } else if (changeVal > 0) {
                return 'price-rise';
            }
            // 默认样式
            return 'color-other';
        }
    },
    renderTo: Ext.getBody()
});

别忘了CSS样式

最后要确保你的CSS里正确定义了这些类:

/* Name列相关样式 */
.color-gio {
    color: #ff0000; /* 红色,可自行修改 */
}
.color-other {
    color: #333333; /* 深灰色,可自行修改 */
}
/* Change列相关样式 */
.price-fall {
    color: #008000; /* 绿色 */
}
.price-rise {
    color: #ff8c00; /* 橙色 */
}

这样修改后,Name列的颜色应该就能正常生效了!

内容的提问来源于stack exchange,提问作者Giorgio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:20:00