jq网格集记录计数

jqGrid set records count

本文关键字:记录 网格 jq      更新时间:2023-09-26

我有一个指向外部API的jqGrid,我无法控制它。 此外部 API 有两个终结点:

  • 数据终结点 - 返回表行数据
  • 计数终结点 - 返回分页计数等,

根据用户输入,jqGrid 筛选器将转换为适当的查询字符串,以筛选外部 API 的数据和计数终结点。

我有 jqGrid url基于用户输入动态构建,并以数据端点为目标......在loadBeforeSend()事件期间,它会调用计数终结点以根据用户筛选器获取最新的分页信息。

我正在使用 jsonreader 功能:

jsonReader: {
                    root: 'products',
                    id: 'id',
                    records: function () {
                        return gridTotal;
                    },
                    total: function () {
                        // var totalPages = (gridTotal + reqOptions.limit-1) / reqOptions.limit;
                        var totalPages = Math.ceil(gridTotal / reqOptions.limit);
                        console.log('totalPages: ' + totalPages);
                        return totalPages;
                    },
                    page: function () {
                        //var totalPages = Math.ceil(gridTotal/20);
                        console.log('currentPage: ' + reqOptions.page);
                        return reqOptions.page;
                    }
                },

加载之前发送方法的示例:

loadBeforeSend: function (xhr, settings) {
    settings.url = _newUrl || endpointURL;
    // Lets fetch our data count...this may change as items get published so lets fetch during load
    products.count(accessToken, _filterQuery)
        .success(function (resp) {
            // This is the total number of products that match our current search
            gridTotal = resp.count;
        }).catch(function (err) {
            console.error(err);
        });
}
从数据端点

获取效果非常好,问题是如何调用计数端点并更新分页数据

已尝试以下操作:

  • setGridParam用于记录、last_page等,
  • 使用getGridParam('reccount')
  • 只需更新 html 以使其看起来正确(无效,因为分页将关闭)

有没有办法

  • 手动关闭 jqgrid URL 的 XHR...所以我可以先请求计数,当它返回时,然后去获取数据?
  • 在计数返回并设置gridTotal后重新运行 jsonreader 功能
  • 使用类似承诺的结构来解决记录计数

已更新以显示@Oleg解决方案

    loadBeforeSend: function (xhr, settings) {
        settings.url = _newUrl || endpointURL;
        // Lets fetch our data count...this may change as items get published so lets fetch during load
        products.count(accessToken, _filterQuery)
            .success(function (resp) {
                // This is the total number of products that match our current search
                gridTotal = resp.count;
gridTotal = resp.count;
                            grid.jqGrid('setGridParam', {
                                page: gridOpts.jsonReader.page(),
                                records: gridTotal,
                                lastpage: gridOpts.jsonReader.total()
                            });
                            grid[0].updatepager(false, true);
            }).catch(function (err) {
                console.error(err);
            });
    }

我希望我正确理解你的问题。在这种情况下,您可以先从数据端点加载主要数据。然后(在loadComplete内部),您可以手动启动新的$.ajax请求,以从计数端点获取数据并更新$.ajax回调success内的分页数据。

更新寻呼机需要做的是:

  1. 根据计数端点返回的数据设置 jqGrid 的 pagerecordslastpage参数。
  2. 调用$("#grid")[0].updatepager(false, true);,将使用上述选项并刷新寻呼机上的信息。

您可以在旧答案和.updatepager(false, true)的用法示例中看到。