Как отключить локальный кеш jqgrid? - PullRequest
0 голосов
/ 19 декабря 2011

Есть ли способ отключить локальный кеш jqgrid ???У меня есть страница, на которой вы строите несколько фильтров и на основе этих параметров я создаю jqgrid.

Проблема в том, что jqgrid не меняет параметры постданных!Я имею в виду, что во втором, третьем, четвертом и т. Д. Поиске результаты всегда равны первому.Мои значения по умолчанию для jqgrid:

jQuery.extend(jQuery.jgrid.defaults, {
        ajaxGridOptions: {
            contentType: 'application/json;',
            type: "POST",
            cache: false,
            beforeSend: function () {
                $(".loading").show(); 
            }
        },
        serializeGridData: function (postData) {
            return JSON.stringify(postData);
        },
        datatype: 'json',
        autowidth: true,
        height: '100%',
        rowNum: 10,
        rowList: [10, 20, 30],
        hidegrid: false,
        prmNames: {
            search: "isSearch",
            nd: null,
            rows: "numRows",
            page: "numPage",
            sort: "orderBy",
            order: "orderType"
        },
        viewrecords: true,
        gridComplete: function () {
            $(".loading").hide();
        },
        jsonReader: {
            root: function (obj) { return obj.d.rows; },
            page: function (obj) { return obj.d.page; },
            total: function (obj) { return obj.d.total; },
            records: function (obj) { return obj.d.rows.length; },
            repeatitems: false
        }
    });

Создание jqGrid:

$myGrid.jqGrid({
      postData: { from: jQuery.parseDate(fromQueryString), to: jQuery.parseDate(toQueryString) },
      url: "/Search.aspx/Find",
      colNames: ['Test'],
      colModel: [
         { name: 'Test', index: 'Test', sortable: false, width: 40 }
      ],
      sortname: "Date",
      sortorder: "desc",
      jsonReader: { id: "ID" },
      pager: "pagerControl",
      caption: "Results"
 });

1 Ответ

1 голос
/ 19 декабря 2011

Если я правильно вас понял, на странице появились элементы управления, создайте некоторые элементы управления, такие как input#from и input#to (<input> поля с идентификаторами "от" и "до"), которые определяют интервал, на который вы отправляетесервер вместе с другими параметрами.

Я полагаю, что ваш код выглядит как

var $myGrid = $("#list"),
    fromQueryString = "",
    toQueryString = "",
    createGrid = function () {
        $myGrid.jqGrid({
            postData: {
                from: jQuery.parseDate(fromQueryString),
                to: jQuery.parseDate(toQueryString)
            },
            url: "/Search.aspx/Find",
            colNames: ['Test'],
            colModel: [
                { name: 'Test', index: 'Test', sortable: false, width: 40 }
            ],
            sortname: "Date",
            sortorder: "desc",
            jsonReader: { id: "ID" },
            pager: "pagerControl",
            caption: "Results"
        });
    },
    myRefresh = function () {
        var fromQueryString = $("#from").val(),
            toQueryString = $("#to").val();

        createGrid();
    };

$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();

Проблема в том, что вышеуказанный код неправильный .createGrid создает сетку только в первый раз, а затем (внутри myRefresh) он просто ничего не дозирует после проверки того, что сетка $myGrid уже создана.Это можно понять, если представить, что многие части сетки: заголовок, заголовки столбцов, пейджер и т. Д. Должны быть созданы только один раз .В следующий раз нужно просто перезагрузить содержимое тела сетки.

Правильный способ обновления jqGrid - это вызов .trigger("reloadGrid") вместо попытки создания сетки, умноженной на несколько раз.Код можно исправить следующим образом:

var $myGrid = $("#list"),
    fromQueryString = "",
    toQueryString = "",
    createGrid = function () {
        $myGrid.jqGrid({
            postData: {
                from: function () {
                    return jQuery.parseDate($("#from").val());
                },
                to: function () {
                    jQuery.parseDate($("#to").val());
                }
            },
            url: "/Search.aspx/Find",
            colNames: ['Test'],
            colModel: [
                { name: 'Test', index: 'Test', sortable: false, width: 40 }
            ],
            sortname: "Date",
            sortorder: "desc",
            jsonReader: { id: "ID" },
            pager: "pagerControl",
            caption: "Results"
        });
    },
    myRefresh = function () {
        $myGrid.trigger("reloadGrid", [{page: 1}]);
    };

$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();

В случае, если методы from и to из postData будут вызываться при каждой перезагрузке сетки.Например, если пользователь щелкнет заголовок столбца, чтобы изменить сортировку сетки, или если пользователь решит отобразить другую страницу сетки.Вы можете прочитать здесь подробнее о подходе.

Единственное, что вы можете изменить дополнительно, это код serializeGridData, который должен проверять свойства postData и вызывать функцию, еслинеобходимо.Подробнее см. здесь .

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