向jqGrid添加一个函数以添加本地JSON

时间:2011-06-17 16:54:11

标签: javascript jquery jquery-plugins jquery-selectors jqgrid

我正在尝试为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);

请注意,这些行在不在此函数内时有效。

有什么想法吗?谢谢!

2 个答案:

答案 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