Фильтрация в jqgrid с удаленными данными и форматированием

У меня есть требование фильтровать данные локально в jqgrid без использования встроенного пользовательского интерфейса. Я последовал ответу Олега в сообщении jqGrid Filtering Records. Это сработало как шарм с некоторыми изменениями в моей настройке. Однако я не могу заставить его работать для поля, в котором отформатированы записи. Данные jqgrid являются удаленными.

Размещение образца кода из jqGrid Filtering Records, поскольку это в значительной степени то, что у меня есть:

$("#search").click(function() {
var searchFiler = $("#filter").val(), grid = $("#list"), f;

if (searchFiler.length === 0) {
    grid[0].p.search = false;
    $.extend(grid[0].p.postData,{filters:""});
}
f = {groupOp:"OR",rules:[]};
f.rules.push({field:"name",op:"cn",data:searchFiler});
f.rules.push({field:"note",op:"cn",data:searchFiler});
grid[0].p.search = true;
$.extend(grid[0].p.postData,{filters:JSON.stringify(f)});
grid.trigger("reloadGrid",[{page:1,current:true}]);
});

В моем случае поле name отформатировано в jqgrid:

{name:"name", index:"name", width:250, align:'left',
  formatter: function(cellvalue, options, rowObject)
{
  return rowObject.Data[0]['userName'];
}
 },
 ...
 jsonReader : {
        repeatitems:false,
         root: 'rows',
         userdata: 'rows'
      },
loadonce: true,      
viewrecords: true,
autowidth: true,
multiselect: false,
height: 500,    
rowNum: 999,
subGrid: true,

Мы делаем запрос к бэкэнду один раз и сохраняем данные в «строках» для отображения в подсетке.

Любые указатели приветствуются.

Благодарность,

Аша


person Alice    schedule 19.11.2012    source источник


Ответы (1)


Не думаю, что в этом случае нужно использовать специальный форматировщик. Я полагаю, что вы можете использовать jsonmap. Наверное, jsonmap: "Data.0.userName" будет нуждаться в тебе. В качестве альтернативы вы можете использовать jsonmap как функцию (например, здесь или здесь).

В общем, вы всегда должны определять unformatter вместе с пользовательский модуль форматирования. Это могло быть причиной вашей текущей проблемы.

person Oleg    schedule 19.11.2012
comment
Огромное спасибо, Олег. Оно работало завораживающе. Полагаю, мне здесь никогда не понадобился форматтер. Jsonmap: Data.0.userName работал. Теперь я не совсем понимаю, почему я вообще использовал специальный форматировщик, потому что я просто отображаю здесь данные. Вы дали мне много вариантов, так что в следующий раз я смогу принять лучшее решение. - person Alice; 20.11.2012
comment
Для фильтрации можно сделать регистр нечувствительным. Я попытался добавить 'var searchFiler = $ (# filter) .val (). ToLowerCase (), f', но это пропустит случаи, когда у меня есть что-то вроде «Asha» в поле «name». - person Alice; 20.11.2012
comment
Неважно, добавлен ignoreCase: true к jqgrid, который вы упомянули в Нечувствительный к регистру фильтр с подстановочными знаками с filterToolbar. Это сработало. Еще раз спасибо. - person Alice; 20.11.2012
comment
@Asha: Вы можете просто включить ignoreCase: true параметр jqGrid. - person Oleg; 20.11.2012