介绍
我通过 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;
});
}
});
有什么想法吗?谢谢!