Обновление стиля строки расширенной сетки Dojo - выборка из магазина сообщений

Используя Dojo, я установил сетку, которая ссылается на хранилище данных. После загрузки сетки у меня есть функция подключения, которая перебирает строки и устанавливает цвет текста строки на основе значения ячейки. Это отлично работает (код скопирован ниже).

var gagrid = new dojox.grid.EnhancedGrid({
query: {
Keyword: '*'
},
store: gastore,
structure: galayout,
escapeHTMLInData: false,
plugins: {
nestedSorting: true
}
},
document.createElement('div'));

dojo.connect(gagrid, 'onStyleRow', this, function(row) {
var item = gagrid.getItem(row.index);

if (item) {
var value = gagrid.store.getValue(item, "Performance", null);
if (value == 3) {
row.customStyles += "color: green;";
} else if (value == 2) {
row.customStyles += "color: red;";
}
}
gagrid.focus.styleRow(row);
gagrid.edit.styleRow(row);
});

У меня есть некоторая функциональность после загрузки страницы / сетки (через взаимодействие с пользователем), которая использует функцию извлечения из магазина. Он проходит по строкам моего хранилища сетки и изменяет значение ячейки в зависимости от ввода пользователя. Опять же, это работает нормально, значения в сетке обновляются правильно. Код ниже.

gastore.fetch({
query: {Keyword: '*'},
onComplete: function(items, request){
var i;
for (i = 0; i < items.length; i++) {
var item = items[i];
var performance;
if(parseInt(items[i]["Visits"])>=rp)
{
if(parseInt(items[i]["Bounce"])<=rb&&parseInt(items[i]["Time"])>=rmp)
{
performance=3;
}
else
{
performance=2;
}
}
else
{
performance=1;
}
gastore.setValue(item,"Performance",performance);
}
}
});

Однако после обновления значений пользовательские стили не применяются к строкам мгновенно. Например, цвет текста в строке остается зеленым, когда он должен измениться на черный.

После взаимодействия с сеткой (например, сортировки столбца) цвета строк обновляются до своих правильных цветов.

Есть ли способ активировать правильные пользовательские стили для строки сетки сразу после вызова функции извлечения из магазина?

Извините, если мой вопрос немного затянут - просто подумал, что постараюсь полностью объяснить проблему :)


person Matt Redford    schedule 11.02.2013    source источник
comment
См. Этот вопрос ... http://stackoverflow.com/questions/7132559/dojox-datagrid-onstylerow-works-first-time-then-not-again   -  person Remento    schedule 12.02.2013


Ответы (1)


перебирать ряды не нужно! Вы можете использовать атрибуты «formatter» и «styles» при определении макета «galayout» ... Взгляните на это:

function getExtImg(valueOfColumn) { // Do something with the value...
  return valueOfColumn+'do something with it';
}

var layout = [[{'name': 'Ext', 'field': 'extension', formatter: getExtImg, styles: 'padding: 0px;'},

{'name': 'Filename', 'field': 'documentName', width: 'auto'}]];

// Добавьте этот макет в вашу сетку ...

То, что вы указываете как функцию форматирования, вызывается для каждой строки! Также стиль, который вы указываете в атрибуте стилей.

Думаю, это поможет вам в решении вашей проблемы!

Чтобы иметь возможность изменять стиль строки в модуле форматирования, настройте функцию форматирования следующим образом:

форматирование: функция (val, rowIdx, ячейка) {классы = compute_classes (val, rowIdx, cell); cell.customClasses.push (классы); }

Источник: Как условно оформить ячейку в сетке данных Dojo?

Как видите, вы можете добавлять классы в текущую строку с помощью функции push!

Люциан

person Lucian Depold    schedule 12.02.2013
comment
Спасибо, Люциан. Это может помочь. Раньше я использовал форматтер. Как добавить стиль строки в функцию форматирования (getExtImg)? Есть ли способ сделать это, не возвращая HTML обратно в ячейку? - person Matt Redford; 12.02.2013
comment
Привет, Мэтт, каждая функция форматирования также вызывается со вторым атрибутом rowIndex, указывающим индекс строки, в которой в настоящее время выполняется средство форматирования. Я думаю, что с rowIndex вы можете получить доступ к объекту row с помощью сетки. - person Lucian Depold; 12.02.2013
comment
Посмотрите, пожалуйста, на основной пост, я добавил кое-что, что тоже должно помочь вам в решении вашей последней проблемы! - person Lucian Depold; 12.02.2013