我正在尝试为jqGrid创建一个额外的函数,以简化将JSON数据添加到使用本地数据的网格。以下尝试除了一行以外会导致失败。
$.fn.myrows = function(data) {
$(this).clearGridData();
$(this).jqGrid("setGridParam", {datatype: "json", loadonce: true});
$("#" + (this).selector)[0].addJSONData(data); // PROBLEMATIC LINE
$(this).jqGrid("setGridParam", {datatype: "local", loadonce: true});
};
然后将此函数称为$("#myGrid").myrows(jsonDataObject);
。
请注意,这些行在不在此函数内时有效。
有什么想法吗?谢谢!
答案 0 :(得分:2)
在上一个问题的the answer中,我试图解释如何扩展jqGrid以支持新方法。说实话,我没有看到你将从jqGrid扩展中获得什么真正的优势。为什么不将您的功能定义为
var myrows = function(grid,data) {
// function body
};
并以这种方式使用它:
myrows($("#myGrid"),jsonDataObject);
在我看来,更重要的是实施你需要的东西。您当前的代码有许多缺点。如果网格具有datatype: "local"
,则可以使用本地数据分页。方法addJSONData
添加网格中的所有数据,因此页面大小可以被破坏。
如果你有datatype: "local"
并希望用数据填充它,那么最有效的方法是设置data
网格的setGridParam
参数,然后调用{ {1}}(见here)。
备选方案您可以使用许多其他现有方法,例如addRowData,它允许在一次方法调用时添加多行数据。
如果从服务器获取JSON数据并使用$("#myGrid").trigger('reloadGrid',[{page:1}])
方法填充网格,那将是非常糟糕的方法。从版本3.5开始的jqGrid版本具有丰富的方法来自定义所使用的addJSONData
请求。因此,严格建议您不要在案例中使用ajax
。有关详细信息,请参阅here。
答案 1 :(得分:0)
你有一个错字,在线上这样做:
$("#" + $(this).selector)[0].addJSONData(data); // PROBLEMATIC LINE
$
this