刷新 jqGrid 不会在启用无限滚动的情况下保存当前页面位置



中的示例http://www.trirand.net/demo/javascript/jqgrid/loading_data/scrollbar/index.htmlGuriddo jqGrid JS:4.7.0和4.7.1 版本

(function ($) {
  'use strict';
  $(function () {
    $('#jqGrid').jqGrid({
      url: 'http://trirand.com/blog/phpjqgrid/examples/jsonp/getjsonp.php?callback=?&qwery=longorders',
      mtype: 'GET',
      datatype: 'json',
      page: 1,
      colNames: ['Order ID', 'Customer ID', 'Order Date', 'Freight', 'Ship Name'],
      colModel: [{
        name: 'OrderID',
        key: true,
        width: 75
      }, {
        name: 'CustomerID',
        width: 150
      }, {
        name: 'OrderDate',
        width: 150
      }, {
        name: 'Freight',
        width: 150
      }, {
        name: 'ShipName',
        width: 150
      }],
      width: 750,
      height: 250,
      rowNum: 20,
      scroll: 1, // set the scroll property to 1 to enable paging with scrollbar - virtual loading of records
      emptyrecords: 'Scroll to bottom to retrieve new page', // the message will be displayed at the bottom
      pager: '#jqGridPager'
    });
  });
})(jQuery);

当我打两次电话时:

$('#jqGrid').trigger('reloadGrid', {
    page: 3
});

第一次请求:页面参数如预期的那样为3。

第二次请求:页面参数为1!?

我在刷新按钮上看到的问题与refreshstate相同:"current",它根本不起作用。

首先我可以确认这个错误。它也存在于更旧版本的jqGrid中(例如在jqGrid 4.6中)

if (ts.grid.prevRowHeight && ts.p.scroll) {
    delete ts.p.lastpage;
    ts.grid.populateVisible();
} else {
    ts.grid.populate();
}

jqGrid在第一次重新加载网格时具有ts.grid.prevRowHeightundefined值,并且将ts.grid.prevRowHeight设置为22(22px是行的高度)。因此,网格的下一次(第二次)重新加载将使用populateVisible而不是populate。函数populateVisible仅使用当前滚动位置(bDivscrollTop),并且忽略网格的page参数。

因此,我可以建议您多种解决方案:如果您必须使用特定的旧版本的jqGrid(就像您必须使用jqGrid 4.7一样),那么您可以使用以下代码作为解决方法:

$('#jqGrid')[0].grid.prevRowHeight = undefined; // workaround!!
$('#jqGrid').trigger('reloadGrid', {
    page: 3
});

或者,您可以将jquery.jqgrid.src.js的代码修复为以下

if (ts.grid.prevRowHeight && ts.p.scroll && opts.page === undefined) {
    delete ts.p.lastpage;
    ts.grid.populateVisible();
} else {
    ts.grid.populate();
}

我可以建议你的另一个选项是:你可以从github加载当前版本的免费jqGrid。它是我的jqGrid分支,它基于jqGrid 4.7,包含许多增强功能(请参阅wiki和自述文件)。我刚刚发布了相应的修复程序。

最新更新