【问题标题】:Adding a function to jqGrid to add local JSON向jqGrid添加函数以添加本地JSON
【发布时间】:2011-09-17 08:41:04
【问题描述】:

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

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

有什么想法吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

    你有一个错字,就行了:

    $("#" + $(this).selector)[0].addJSONData(data); // PROBLEMATIC LINE

    $this 之前丢失了

    【讨论】:

    • 不幸的是,这并不能解决问题。显然 "this" 和 "$(this)" 在这种情况下是相同的。不过还是谢谢。
    • @Jack:为什么不直接使用this[0].addJSONData(data);?您遇到的真正问题可能不是线路。我在回答中描述了我如何看待问题。
    【解决方案2】:

    the answer 上,我试图解释如何扩展 jqGrid 以支持新方法。说实话,我看不出 jqGrid 扩展有什么真正的优势。为什么不把你的函数定义为

    var myrows = function(grid,data) {
        // function body
    };
    

    并以这种方式使用它:

    myrows($("#myGrid"),jsonDataObject);
    

    在我看来,更重要的是实现您所需要的。您当前的代码有很多缺点。如果网格有datatype: "local",则可以使用本地数据分页。方法addJSONData将网格中的所有数据添加进去,这样就可以打破页面大小了。

    如果你有datatype: "local" 并想用数据填充它,那么最有效的方法是设置setGridParam 的网格参数data,然后调用$("#myGrid").trigger('reloadGrid',[{page:1}])(参见@987654322 @)。

    您也可以使用许多其他现有方法,例如 addRowData,它允许在一次方法调用中添加多行数据。

    如果您从服务器获取 JSON 数据并使用 addJSONData 方法填充网格,那将是非常糟糕的方法。从 3.5 开始的 jqGrid 版本有丰富的方法来自定义使用的ajax 请求。所以强烈建议你不要在这种情况下使用addJSONData。详情请见here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多