При восстановлении JQGrid через jqGridImport информация о поиске неверна

После экспорта данных с помощью jqGridExport мы импортируем их с помощью jqGridImport. Первая проблема заключалась в том, что параметры нижней панели не возвращались, поэтому я добавил этот код позже. Итак, код выглядит так:

$("#list").jqGridImport({imptype: 'jsonstring', impstring: gridSettings})
.jqGrid('navGrid','#pager', { edit: false, add: false, del: false, search: true, refresh:true },
{},{},{},{closeOnEscape: true, multipleSearch: true, closeAfterSearch: true},{});

Критическая часть строки gridSettings:
"postData":{"_search":true,
"nd":1301031279941,
"rows":20,
"page":1,
"sidx":"a.ID",
"sord":"asc",
"filters":{"groupOp":"AND","rules": [{"field":"fname","op":"bw","data":"T"}]}
}

Все нормально, кроме поиска. Одна строка поиска из postData выше верна, но есть вторая строка поиска, которую я могу описать только как строку поиска по умолчанию. Если я войду и удалю эту строку из окна множественного поиска, все будет так, как должно быть.

Итак, мой вопрос: во-первых, почему множественный поиск не возвращается при восстановлении с помощью jqGridImport?
Во-вторых, есть ли способ программно удалить вторую строку поиска?


person Nate Bunney    schedule 25.03.2011    source источник


Ответы (1)


Поведение нижней панели с навигатором правильное, так как она реализована не как часть сетки. Так что вам действительно нужно установить его дополнительно. Вы можете написать свой собственный экспорт и импорт настроек.

Ситуация с дополнительной последней строкой, которая будет добавлена ​​в диалог поиска, на самом деле является небольшой проблемой, которую можно исправить с помощью следующего кода:

var grid = $("#list");
...

grid.searchGrid(prmSearch);
if (typeof(grid[0].p.postData.filters) === "string" &&
    grid[0].p.postData.filters.length>0) {

    $("#fbox_"+grid[0].id).searchFilter().del();
}
$("#fbox_"+grid[0].id).searchFilter().close();

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

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

person Oleg    schedule 25.03.2011
comment
@ user541319: Как вы видите, в моем примере все работает, поэтому grid[0].p.postData.filters имеет тип string. Если у вас есть объект вместо строки, значит, вы сделали что-то не так в своем коде до этого. Вы должны опубликовать код, который вы используете. В начале я увидел, что "filters":{"groupOp":"AND","rules": [{"field":"fname","op":"bw","data":"T"}]}, которое вы разместили, является окончательным неверным значением. значение должно быть преобразовано в JSON, например, с JSON.stringify. Я не знаю, это ваша ошибка или ошибка в jqGridExport/jqGridImport. - person Oleg; 25.03.2011
comment
Я не говорю, что ваше решение неправильное, очевидно, что это так. Я просто пока не могу реализовать это в своем коде. Я не думаю, что JSON.stringify здесь решит, поскольку я правильно импортирую экспорт. Позвольте мне еще немного взглянуть на мой код. - person Nate Bunney; 25.03.2011
comment
используя дамп для генерации строки из объекта, я вижу, что grid[0].p.postData.filters выглядит как 'groupOp' => AND 'rules'... '0'... 'field' => fname ' op' => bw 'данные' => T - person Nate Bunney; 25.03.2011
comment
Использование if (typeof(grid[0].p.postData.filters.rules[0]['field']) === string && grid[0].p.postData.filters.rules[0]['field' ].length›0) работает для теста. typeof(grid[0].p.postData.filters.rules[0]['field'] возвращает 'fname'. - person Nate Bunney; 25.03.2011
comment
@ user541319: Я не могу подписаться на тебя. Просто создайте сетку и используйте диалоговое окно расширенного поиска, чтобы создать фильтр, а затем посмотрите в postData.filters. Вы увидите, что это строка, а не объект. Я могу только повторить, что вы должны включить код, который воспроизводит вашу проблему. Либо ошибка в вашем коде, либо ошибка в коде jqGridExport/jqGridImport. Тип postData.filters должен быть строковым. - person Oleg; 25.03.2011
comment
На основе вашего кода выше отлично работает следующее. grid.searchGrid (prmSearch); if (typeof(grid[0].p.postData.filters.rules[0]['field']) === string && grid[0].p.postData.filters.rules[0]['field'] .length›0) { var cnt=0; for(var k in grid[0].p.postData.filters){ cnt++; } кт--; $(#fbox_+grid[0].id).searchFilter().del(cnt); } - person Nate Bunney; 25.03.2011