一次将10k +行JSON加载到jqGrid 1k行中

时间:2012-06-12 18:50:04

标签: jqgrid

简介

我通过ajax将JSON对象加载到jqGrid外的浏览器中。然后,我使用以下内容将JSON加载到网格中,初始设置为datatype: "local"

  $("#myGrid").jqGrid("setGridParam", {datatype: "json", loadonce: true});
  $("#myGrid")[0].addJSONData(jsonObject);
  $("#myGrid").jqGrid("setGridParam", {datatype: "local", loadonce: true});

以上技巧让网格允许我加载一个JSON对象,而jqGrid不会自动调用它(这是它的默认行为)。

实现服务器端分页是理想的,但在我的情况下目前不可行。

问题

我需要从JSON加载大约10-20k行到网格中。但这需要几秒钟。为了提高性能,我试图一次从JSON对象添加1k行(这很快并且不会使浏览器失速),但我无法弄清楚如何使用我手上的JSON对象。这是我的尝试,它将第一个1k行加载到网格中,但没有正确更新寻呼机,并且不允许我通过addJSONData添加其他行。

$("#myGrid").jqGrid({
  jsonReader: {
    page: function(json) { return 1; },
    records: function(json) { return json.records; },
    repeatitems: false,
    root: "objects",
    total: function(json) { return json.totalPages; }
  },
  // . . .
}

$.jgrid.extend({
  loadJsonFirstPageOnly: function(json) {
    return this.each(function() {
      // copy the first page of data into a truncated JSON object to load into the grid
      var resultsPerPage = $("#" + this.id + "_ResultsPerPage").val();
      var numberOfPages = parseInt(json.objects.length / resultsPerPage);
      var firstPageData = {"objects": [], "pages": numberOfPages, "records": json.objects.length};
      for (var i = 0; i < 1000 && i < json.objects.length; i++) {
        firstPageData.objects[i] = json.objects[i];
      }
      // load the truncated JSON object into the grid
      var $this = $(this).jqGrid("setGridParam", {datatype: "json", loadonce: true});
      this.addJSONData(firstPageData);
      $this.jqGrid("setGridParam", {datatype: "local", loadonce: true});
      // adjust the grid's internal state
      this.p.allData = json;
    });
  }
});

有什么想法?谢谢!

0 个答案:

没有答案