Пользовательский формат 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' флажок установлен.

Другие вопросы по тегам