jqGrid фильтр или поиск по дате не работает на стороне клиента
У меня есть ASP.NET MVC 3 страницы. На ней у меня есть таблица, которую я превращаю в jqGrid, используя данные JSON из вызова ajax. Сетка имеет следующую настройку:
myGrid = $('#myGrid');
myGrid.jqGrid({
caption: 'My Grid',
datatype: 'local',
data: data.rows,
height: 250,
pager: '#myPager',
viewrecords: true,
colModel: [
...,
{
label: 'blah',
name: 'blah',
align: 'left',
sortable: true,
editable: false,
width: 85,
formatter: 'date',
sorttype: 'date',
datefmt: 'm/d/Y',
formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' }
},
...
]
});
// turn on filter toolbar
myGrid.filterToolbar();
data.rows возвращается из вызова ajax. Это работает во всех отношениях, кроме одного. Я могу разбивать на страницы на стороне клиента, сортировать на стороне клиента и выполнять поиск по каждому полю, кроме того, для которого я показываю colModel. Это "бла" поле является полем даты, и оно правильно отображает даты в формате мм / дд / гггг. Однако, когда я набираю что-то вроде 17.11.2010 на панели инструментов и нажимаю ввод, поиск возвращает 0 записей.
Итак, я углубился в код jqGrid, и вот что он генерирует перед поиском:
{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]}
В конце концов, когда он проходит через каждую строку и оценивает операцию над полем, строка eval(m) && p.push(this), m выглядит так:
(String(this.blah).substr(0,10) == String("11/17/2010"))
По сути, мне кажется, что он не признает, что поле является датой. Он вызывает parse вместо parseDate. У кого-нибудь есть идеи, как это исправить? Я знаю, что поиск на стороне сервера очень прост, я могу просто пропустить эту строку, разобрать ее и bam. Но я бы хотел остаться на стороне клиента, если смогу. Мне удалось продублировать это в некоторых примерах, которые поставили Олег и Том, так что это либо проблема, либо я что-то упустил в конфигурации...
1 ответ
Я нахожу ваш вопрос интересным, поэтому +1 от меня до вашего вопроса. Потому что вы разместили строку
(String(this.blah).substr(0,10) == String("11/17/2010"))
используется в eval
Я полагаю, что во время локального поиска вы тратите много времени, чтобы понять, как реализован локальный поиск. Потому что вы видите, что строка выше (см. (String(this.blah).substr(0,10) ...
) не то, что должно быть сделано (значение String(this.blah)
будет "2010-11-17" вместо "17.11.2010"), вы можете перезаписать соответствующую функцию jqGrid (функция _getStr
Внутри $.jgrid.from
) и исправить проблему в пути.
Некоторое время назад я трачу много времени на подготовку соответствующей демонстрации, которая демонстрирует эту технику. Демо было подготовлено в качестве ответа на форуме Trirand. В вопросе один хотел найти такие строки, как 'bénevise'
в случае поиска 'benevise'
, Таким образом, нужно реализовать действительно индивидуальный локальный поиск. Я надеюсь, что информации будет достаточно для решения проблемы, которую вы описываете.
ОБНОВЛЕНО: Мне кажется, я нашел гораздо более простой обходной путь. Вы должны просто определить searchoptions: {sopt: ['eq','ne']}
для 'blah'
столбец с данными. затем "bw"
(начать с) не будет использоваться для столбца. Операции "равно" и "не равно" работают правильно при локальном поиске.
ОБНОВЛЕНО 2: Вот рабочий пример, где я использую sopt
вариант.