【问题标题】:jqGrid set records countjqGrid 设置记录数
【发布时间】:2016-03-02 20:01:08
【问题描述】:

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

  • 数据 Endpoint - 返回表格行数据
  • Count Endpoint - 返回分页计数等,

根据用户输入,jqGrid 过滤器被转换为适当的查询字符串,以过滤外部 API 的 DataCount 端点。

我有 jqGrids url 基于用户输入动态构建并以 Data 端点为目标...在 loadBeforeSend() 事件期间它调用 Count根据用户过滤器获取最新分页信息的端点。

我正在使用 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 方法示例:

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);
        });
}

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

尝试了以下方法:

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

有没有办法

  • 为 jqgrid URL 手动触发 XHR...这样我就可以先请求 Count,当它返回时再去获取数据?
  • Count 返回并设置gridTotal 后重新运行 jsonreader 功能
  • 使用类似 promise 的结构来解析记录数

更新以显示@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);
            });
    }

【问题讨论】:

    标签: javascript jqgrid


    【解决方案1】:

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

    更新寻呼机需要做的是:

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

    您可以在the old answer.updatepager(false, true) 的使用示例中看到。

    【讨论】:

    • 是的,您对问题的理解是准确的,我希望我解释得足够好,干得好 =) ... 太好了,我之前遇到过那个“旧答案”,但是 'pageServer', 'recordsServer ',而 'lastpageServer' 为空。我没有使用这些字段从“getGridParam”中获取,而是回想起我的 jsonreader 函数。非常感谢!! @Oleg #FTW #Again
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多