【问题标题】:jqGrid reloadGrid and refresh new colModel and colNamesjqGrid reloadGrid 并刷新新的 colModel 和 colNames
【发布时间】:2013-04-05 14:28:20
【问题描述】:

我正在尝试使用新行、colNames 和 colModel 重新加载 jqGrid。行数据似乎加载正常,但列似乎没有被刷新。我尝试过使用 GridUnload 和 GridDestroy,但我最终完全丢失了 jQuery DOM 实例,也不再加载任何数据。

var grid = $('#my-grid');

if(grid[0].grid == undefined) {
    grid.jqGrid(options);
} else {
    grid.setGridParam(options);
    grid.trigger('reloadGrid');
}

网格实例很重要,因为它将作为参数传递给其他对象。这些对象可能会附加监听器或触发事件。

我使用的是 4.4.2 版

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:

    reloadGrid 仅重新加载网格的body,而不更改将在创建网格时创建的列标题。

    如果您需要更改列数或使用colNamescolModel 代替您拥有的旧网格或重新创建 网格。您可以先使用GridUnload 方法,然后创建新网格(在您的情况下调用grid.jqGrid(data))。重要的是,如果您在代码中将 jQuery 选择器缓存到像 grid 这样的变量中,则必须在调用 GridUnload 后再分配一次 grid,因此您应该在调用GridUnload.

    查看the answer了解更多详情和代码示例。

    【讨论】:

    • 如在使用 jqGrid() 之前使用 GridUnload() 提到的那样不起作用,当尝试第二种类型时,它会在 jquery 中抛出 TypeError: d.emptyRows is null
    • @gawpertron:我想你用错了。您可以验证引用答案中的演示在 jqGrid 4.4.2 或 4.4.4 中是否可以正常工作。我想您在使用GridUnload 后不会重新分配grid 的值,就像我在回答中描述的那样。如果您有问题,您应该将您的问题附加到您使用的当前代码
    • 是的,您的答案在大多数情况下都有效。但我有一个特殊情况,我需要保持对原始表格元素的引用完好无损
    • @gawpertron:我不明白为什么为什么你需要有<table>相同的 DOM元素。唯一的原因可能是您在变量中持有对元素的引用。因此,就像我写的那样,您应该只为变量分配新值。 jqGrid 在<table> 内动态构建很多 其他DOM 元素以及在其上的许多div 的问题。 <table> 仅 1) 定义网格的位置以及在网格的其他元素中用作前缀/后缀的 id 名称。如果<table> 上的所有其他元素都将被更改,为什么还需要完全保持<table> 不变?
    【解决方案2】:

    似乎 jqGrid 从 DOM 中删除了初始的 <table></table> 并替换它或忘记了引用(我没有仔细研究它)。

    因此,每次要创建新网格时,您都必须重新选择新表,即。 $('table#my-grid')。如果您想将网格表的引用作为参数传递给应用程序的其他部分,这会变得很棘手。

    我的解决方法是删除网格引用并用原始表格替换网格的包装 div。然后用新的 colModel 和 colNames 以正常方式创建一个 jqGrid。

    grid.empty();
    delete grid[0].grid;
    $('#gbox_my-grid').replaceWith(grid);
    grid.jqGrid(options);
    

    这不是最整洁的解决方案,但它确实让我可以永久引用原始 <table>。不过,我不确定其他 jqGrid 插件将如何受到影响。

    编辑

    事实证明jQuery DataTables 更适合自定义,我们采用了它而不是使用 jqGrid。

    【讨论】:

    • #JS var grid = $('#jqGrid'); if(grid[0].grid == undefined) { grid.jqGrid(options); } 其他 { grid.empty();删除网格[0].grid; $('#gbox_jqGrid').replaceWith(grid); grid.jqGrid(选项); } #HTML
    【解决方案3】:

    我结合了这两个答案并进行了一些修改以使其正常工作。

    var grid = $('#tableID');
    
    if(grid[0].grid == undefined) {
      grid.jqGrid(options);
    } else {
      delete grid;
      $('#tableID').GridUnload('#tableID');
      $('#tableID').jqGrid(options);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      相关资源
      最近更新 更多