Первая часть вашего вопроса - отображение и фильтрация логических значений. Я использую флажки для отображения таких значений. В отличие от вашего случая у меня обычно много таких столбцов. Чтобы уменьшить размер данных JSON, я использую «1» и «0» вместо "true"
и "false"
. Далее я использую следующие настройки столбца
formatter: 'checkbox', align: 'center', width: 20,
edittype: 'checkbox', editoptions: { value: "1:0" },
stype: "select", searchoptions: { sopt: ['eq', 'ne'], value: "1:Yes;0:No"
Таким образом, для поиска пользователь должен выбрать «Да» или «Нет» в поле выбора. Поскольку у меня много таких столбцов, я определил объект templateCeckbox
в одном файле JavaScript, который я включаю на каждой странице проекта:
my.templateCeckbox = {
formatter: 'checkbox', align: 'center', width: 20,
edittype: 'checkbox', editoptions: { value: "1:0" },
stype: "select", searchoptions: { sopt: ['eq', 'ne'], value: "1:Ja;0:Nein" }
};
Тогда типичное определение столбца равно
{
name: 'IsInBasis', index: 'InBasis', template: my.templateCeckbox,
cellattr: function () { return ' title="TS-Basis"'; }
},
(подробности о шаблонах столбцов см. В ответе ). Я нахожу также практичным, если всплывающая подсказка показывается, если навести указатель мыши на текст рядом с заголовком столбца. Поэтому я использую атрибут cellattr
. В случае наличия множества столбцов с флажками это немного улучшает удобство использования.
Чтобы иметь возможность отображать много столбцов с чечбоксами, я лично использую вертикальные заголовки столбцов. Я рекомендую вам прочитать старый ответ , который может быть дополнительно интересен, поскольку в нем описывается, как реализовать быструю фильтрацию данных относительно внешней панели флажков.
Теперь о построении селекторов для столбца «Конусы». Если у вас есть действие AvailableCones
, которое предоставляет список возможных опций, таких как массив (список) строк, вы должны использовать dataUrl: '/ IceCream / AvailableConeTypes' вместо value: createSearchSelection(url)
в качестве searchoptions
. Вы хорошо добавляете только функцию buildSelect
, которую я описал в части «ОБНОВЛЕНО» ответа .
{
name: 'ConeType', width: 117, index: 'ConeType', editable: true, align: 'center',
edittype: 'select', stype: 'select',
editoptions: {
dataUrl: urlBase + '/AvailableConeTypes',
buildSelect: my.buildSelect
},
searchoptions: {
dataUrl: urlBase + '/AvailableConeTypes',
buildSelect: my.buildSelect
}
}
, где
my.buildSelect = function(data) {
var response = jQuery.parseJSON(data.responseText),
s = '<select>', i, l, ri;
if (response && response.length) {
for (i=0, l=response.length; i<l; i += 1) {
ri = response[i];
s += '<option value="' + ri + '">' + ri + '</option>';
}
}
return s + '</select>';
};