Пользовательский формат jqGrid не работает на addClass
Я заполняю новую сетку из json пользовательским форматером, который определен:
testFormatter(value,el,opts)
{
if (value==0)
{
$(el).addClass("Fail");
}
…
}
Я ожидаю, что ячейки будут использовать класс css, но если я проверю ячейки, они не добавят этот класс.
1 ответ
Вы допустили типичную ошибку при использовании пользовательского форматера. Важно понимать, что jqGrid имеет лучшую производительность, если сетка будет создана как строка. В случае, если gridview:true
дает вам производительность. Любой пользовательский форматер должен работать в gridview:true
режим, поэтому пользовательский форматер не имеет параметра, который является элементом DOM, и поэтому вы не можете использовать такие операции, как $(el).addClass("Fail");
В некоторых старых ответах (см. Здесь и здесь) вы можете найти, как решить проблему, но я бы предложил использовать новую функцию jqGrid 4.0.0: cellattr
вариант. Для понимания: цель пользовательского форматера - не добавлять некоторые атрибуты HTML, например, класс. Его следует использовать, например, для преобразования какого-либо универсального формата даты, такого как yyyy-mm-dd, в локализованную форму, такую как dd.mm.yyyy (немецкий стиль). Если вы не хотите изменять формат столбца, но хотите добавить только некоторые атрибуты, такие как title
(используется для всплывающих подсказок), class
(как в вашем случае), style
и так по новой cellattr
вариант то что тебе нужно.
В вашем случае вы можете определить
cellattr: function(rowId, cellValue, rawObject, cm, rdata) {
if (cellValue==0) {
return ' class="Fail"';
}
}
Посмотрите небольшую демонстрацию здесь:
В демо я добавил calsses ui-state-error
а также ui-state-error-text
ко всем клеткам 'Client'
столбец, где в 'Closed'
флажок установлен.