在ExtJS网格单元格中部分设置文本颜色

时间:2014-07-29 16:16:54

标签: css extjs formatting extjs4.2

我有一个ExtJS 4.2网格列(作为PHP MVC 3网站的一部分),涉及项目的一组进程的状态。此列返回已完成的每个进程的三个字母缩写字符串,以空格分隔,例如Was Pre Cut将是已清洗,准备和剪切的项目,Was Scr Pee将是洗过,擦洗过的物品。

但是,所需的功能是检索所有进程,并设置每个条目的样式以显示它是否已完成;例如,<green>Was Pre</green> Cut表示已经洗涤和准备但未切割的物品。

这可能吗?这是我将每个进程的值和相应的样式格式作为数组对象而不是字符串传递,并通过单元格的渲染器生成所需的格式,还是我对网格列的渲染器的能力持乐观态度?

2 个答案:

答案 0 :(得分:2)

列渲染器为您提供输出HTML的运行时,您几乎无法高估其功能......

我不确定我是否完全理解你的问题,但这里有一个例子。给定可能的进程列表,它显示每条记录的所有进程,并突出显示为此记录标记的进程(example fiddle):

var processes = ['Foo', 'Bar', 'Baz', 'Bat']; // all available processes

new Ext.grid.Panel({
    renderTo: Ext.getBody()
    ,width: 400
    ,height: 200
    ,forceFit: true

    ,store: {
        fields: ['id', 'status', 'statusDetails']
        ,data: [
            {id: 1, status: 'Foo Bar', statusDetails: ['Foo', 'Bar']}
            ,{id: 2, status: 'Bar Baz', statusDetails: ['Bar', 'Baz']}
            ,{id: 3, status: 'Baz Bat', statusDetails: ['Baz', 'Bat']}
        ]
    }

    ,columns: [{
        dataIndex: 'id'
        ,text: "ID"
        ,width: 40
    },{
        dataIndex: 'status'
        ,text: "Status"
        ,renderer: function(value, md, record) {
            md.tdCls = 'processes-cell'; // gives us a hook for CSS
            return Ext.Array.map(processes, function(process) {
                var statusDetails = record.get('statusDetails');
                // possible alternative:
                // var statusDetails = record.get('status').split(' ');
                return '<div class="process ' + process + ' '
                + (statusDetails.indexOf(process) !== -1 ? 'on' : 'off')
                + '">' + process
                + '</div>';
            }).join('');
        }
    }]
});

并为您的内心设计风格。例如:

.processes-cell .process {
    display: inline-block;
    width: 25%;
    text-align: center;
    border: 1px solid white;
}
.processes-cell .process.off {
    background-color: lightpink;
}
.processes-cell .process.on {
    background-color: lightgreen;
}
.processes-cell .x-grid-cell-inner {
    padding: 1px;
}

答案 1 :(得分:0)

Ha yep rixo打败了我。他是对的,您需要使用列的renderer属性。我也创建了一个小提琴,以防你可能需要看另一个例子:https://fiddle.sencha.com/#fiddle/872