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 вариант.

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