Как покрасить EXTJS 6.2 современной сеткой
Я столкнулся с проблемой. Я создаю современное приложение EXTJ 6.2 с архитектором Sencha 4.1. Я использую компонент сетки в моей панели с магазином, загруженным сервером. Я хотел бы раскрасить строки в соответствии с имеющимися у меня данными.
В классике это выполнимо с
viewConfig: {
forceFit: true,
getRowClass: function(record, rowIndex, p, store) {
//some if statement here
}
Я попробовал это по-современному, но это не работает. Кто-нибудь знает другой способ или взломать, что я мог бы сделать цвет строк? Или в лучшем случае хотя бы поменяйте один цвет фона.
Я действительно хотел бы избежать использования списка, если это возможно.
Спасибо аги
3 ответа
В современном вы можете использовать itemConfig для настройки Ext.grid.Row
,
Добавьте приведенный ниже код к скрипке Сенчи:
Ext.application({
name : 'Fiddle',
launch : function() {
var store = Ext.create('Ext.data.Store', {
fields: ['name', 'email', 'phone'],
data: [
{ 'name': 'Lisa', "email":"lisa@simpsons.com", "phone":"555-111-1224", color: "blue" },
{ 'name': 'Bart', "email":"bart@simpsons.com", "phone":"555-222-1234", color: "green" },
{ 'name': 'Homer', "email":"home@simpsons.com", "phone":"555-222-1244", color: "yellow" },
{ 'name': 'Marge', "email":"marge@simpsons.com", "phone":"555-222-1254", color: "red" }
]
});
Ext.create('Ext.grid.Grid', {
title: 'Simpsons',
variableHeights: true,
store: store,
itemConfig: {
listeners: {
painted: function (row) {
var record = row.getRecord();
var color = record.get('color');
row.setStyle('background: '+color)
//if (color == 'red')
//row.setStyle('background: red');
}
}
},
columns: [
{
text: 'Name',
dataIndex: 'name',
minWidth: 200,
//flex: 1,
//cellWrap: true,
cell: {
bodyStyle: {
whiteSpace: 'normal'
}
}
},
{
text: 'Email',
dataIndex: 'email',
flex: 2,
minWidth: 250
},
{
text: 'Phone',
dataIndex: 'phone',
flex: 1,
minWidth: 120
},
{
text: 'Color',
dataIndex: 'color',
flex: 1
}
],
//height: 200,
//layout: 'fit',
fullscreen: true
});
}
});
Часть itemConfig - это то, что сделает свое дело.
Я обнаружил, что ни одно из решений, предложенных в принятом ответе, не работает для меня. Решение с использованием окрашенного обработчика событий работает только при первой загрузке. Если данные обновляются, стиль не меняется, поэтому строки по-прежнему окрашиваются в соответствии с исходными данными. Решение для рендеринга громоздко, если у вас большое количество столбцов или вы хотите иметь несколько рендереров.
Для тех, кто в той же лодке, вот мое решение:
itemConfig: {
viewModel: true,
bind: {
cls: '{record.IsEnabled === false ? "disabled" : ""}'
}
}
Чтобы раскрасить строку, следующий код не мог работать в моем проекте
itemConfig: {
listeners: {
painted: function(row) {
var record = row.getRecord();
}
}
}
row.getRecord не работает (getRecord() не распознается как функция)
Мне удалось раскрасить строку из ячейки
columns: [{
text: 'Name',
dataIndex: 'name',
width: 150,
sortable: true,
renderer: function(v, record, dataIndex, cell) {
var row = cell.up();
row.setStyle('background: ' + record.get('color') + ';');
return v;
}
}]