Пользовательский формат jqGrid не работает на addClass - PullRequest
0 голосов
/ 18 мая 2011

Я заполняю новую сетку из json пользовательским форматером, который определен форматером:

testFormatter(value,el,opts)
{
     if (value==0)
     {
          $(el).addClass("Fail");
     }
     …
}

Я ожидаю, что ячейки будут использовать класс css, но если я проверю ячейки, они не добавят этот класс.

1 Ответ

6 голосов
/ 18 мая 2011

Вы допустили типичную ошибку использования пользовательского форматера . Важно понимать, что jqGrid имеет лучшую производительность, если сетка, содержащаяся, будет создана как строка . В случае gridview:true дает вам производительность. Любой пользовательский форматер должен работать в режиме gridview:true, поэтому пользовательский форматер не имеет параметра , являющегося элементом DOM, и поэтому вы не можете использовать такие операции, как $(el).addClass("Fail");

В некоторых старых ответах (см. здесь и здесь ) вы можете найти, как решить проблему, но я бы предложил использовать новую функцию jqGrid 4.0.0: cellattr вариант. Для понимания: целью пользовательского форматера не является добавление некоторых атрибутов HTML, таких как class, например. Его следует использовать, например, для преобразования какого-либо универсального формата даты, такого как yyyy-mm-dd, в локализованную форму, такую ​​как dd.mm.yyyy (немецкий стиль). Если вы не хотите изменять формат столбца, но хотите добавить только некоторые атрибуты , например title (используется для всплывающих подсказок), class (как в вашем случае), style и т. Д. на новой опции cellattr то, что вам нужно.

В вашем случае вы можете определить

cellattr: function(rowId, cellValue, rawObject, cm, rdata) {
    if (cellValue==0) {
        return ' class="Fail"';
    }
}

См. Небольшую демонстрацию здесь :

enter image description here

В демоверсии я добавил calsses ui-state-error и ui-state-error-text во все ячейки столбца 'Client', где в 'Closed' установлен флажок.

...