Поиск jGrid не работает должным образом, когда правило соответствия 'any' и первый запрос имеет dataUrl - PullRequest
2 голосов
/ 18 февраля 2011

Сценарий:
Используйте "stype: 'select" "для столбца" Client "во всплывающем окне поиска.

dataUrl для этого столбца возвращает "<select><option value='F'>F</option><option value='O'>O</option></select>"

Откройте всплывающее окно поиска.

Первая строка критериев поиска: 'Клиент не равен F'

Вторая строка критериев поиска: ' Сумма не равна 300'

тип соответствия: 'any'

Нажмите на Find.

Я ожидаю, что обе записи с типом клиента == 'F' появятся, но ни одна не появится.Похоже, что тип соответствия по-прежнему «И» вместо «ИЛИ».

$(function() {
    var mydata = [              
            {id:"1", name:"test",       amount:"200"},
            {id:"2", name:"test2",      amount:"300"},
            {id:"3", name:"F",          amount:"400"},
            {id:"4", name:"test4",      amount:"200"},
            {id:"5", name:"test5",      amount:"300"},
            {id:"6", name:"test6",      amount:"400"},
            {id:"7", name:"test7",      amount:"200"},
            {id:"8", name:"test8",      amount:"300"},
            {id:"9", name:"test9",      amount:"400"},
            {id:"10",name:"test10",     amount:"500"},
            {id:"11",name:"F",          amount:"500"},
            {id:"12",name:"test11",     amount:"500"},
            {id:"13", name:"test",      amount:"200"},
            {id:"14", name:"O",         amount:"200"}
    ];
    jQuery("#list").jqGrid({            
        datatype: "local",
        data: mydata,
        width: 700,
        colNames:['Inv No','Client', 'Amount'],
        colModel:[
            {name:'id',index:'id', width:65, sorttype:'int', searchoptions:{sopt:['eq','ne','lt','le','gt','ge']}},
            {name:'name',index:'name', width:100, searchoptions:{dataUrl:'/api/domains/producttypedomain'}},
            {name:'amount',index:'amount', sorttype:'int', width:80, align:"right"}
        ],
        rowNum:100, 
        pager: '#pager',            
        height:'auto',
        viewrecords: true,
        rownumbers: true,
        gridview : true,            
        caption:"Advanced Search Example"
    });
    jQuery("#list").jqGrid('navGrid','#pager',
    {
        edit:false,add:false,del:false,search:true,refresh:true
    },
    {}, // edit options
    {}, // add options
    {}, //del options
    {multipleSearch:true, overlay:false,  recreateFilter:true} // search options
    );
});

1 Ответ

1 голос
/ 19 февраля 2011

Я проверил ваш пример и вижу, что вы нашли ошибку в jqGrid.Так что +1 от меня для вас.

Кстати, такая же ошибка все еще существует в новой версии нового многопользовательского плагина, который сейчас находится в альфа-фазе (см. здесь для получения дополнительной информации).Ошибка может быть воспроизведена, если попытаться выполнить ИЛИ (любую) операцию из двух «не равных» операций.В реализации «не равно» есть ошибка.

В текущей версии (с ошибкой) jqGrid поиск / фильтрация следует за выполнением операторов типа

!(parseInt(this.amount,10) == parseInt(200,10)) && !(parseInt(this.amount,10) == parseInt(500,10))

в случаеоперация ((amount<>200)||(amount<>500)).Это неверно.Реализация «не равно» содержит ошибки в текущей версии jqGrid.

Я исправил проблему в исходном коде jqGrid следующим образом:

1) Я добавил новую функцию notEquals определенакак

this.notEquals=function(f,v,t){
    return self._compareValues(self.equals,f,v,"!==",t);
};

и вставил его после this.equals (см. здесь ).

2) Я изменил строку 1359 grid.base.js от

'ne':function(queryObj) {return queryObj.not().equals;},

до

'ne':function(queryObj) {return queryObj.notEquals;},

После исправлений поиск работает корректно.Вы можете увидеть результаты здесь (вашу оригинальную версию можно проверить здесь )

В следующий раз я опубликую свое предложение в на форуме trirand и я надеюсь, что Тони Томов (разработчик jqGrid) внедрит исправления в jqGrid.

ОБНОВЛЕНО : Как я и обещал, я опубликовал отчет об ошибке вместе с моими предложениями по устранению проблемы.

ОБНОВЛЕНО 2 : ошибка уже исправлена ​​в текущей версии для разработчиков на GitHub .Вы можете увидеть результаты здесь , которые используют новую фиксированную версию с еще большими изменениями, как я предложил в своем ответе.Новый интерфейс множественного выбора вы можете увидеть здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...