2011-12-19 4 views
0

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

Проблема в том, что jqgrid не изменяет параметры postdata! Я имею в виду, что во втором, третьем, четвертом и т. Д. Результаты всегда равны первому. Мои 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

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

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

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 будут называться на каждой сетку перезагрузке. Например, если пользователь нажимает на заголовок столбца, чтобы изменить сортировку сетки или пользователь выбирает отображение другой страницы сетки. Вы можете прочитать here больше о подходе.

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

+0

Мой подход заключался в вызове .jqGrid ('GridUnload') – Alexandre

+0

@Alexandre. Использование «GridUnload» возможно, но вы уверены, что существует часть вашего кода, которую вы не разместили. Где код при заполнении 'fromQueryString' и' toQueryString' и где вы используете 'GridUnload'? Более того, я нахожу странным, что вы используете «url:» /Search.aspx/Find »- URL с ASPX, а не расширение ASMX или ASHX. Не могли бы вы расширить код, который вы использовали? – Oleg

+0

Это веб-методы, посмотрите http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/ – Alexandre

Смежные вопросы