2016-03-02 164 views
1

我有一个jqGrid指向外部API,我无法控制。这种外部API有两个端点:jqGrid设置记录计数

  • 数据端点 - 返回表行数据
  • 计数端点 - 返回分页计数等,根据用户输入的jqGrid过滤

转换为相应的查询字符串以过滤外部API的数据计数端点。

我正在建造基于jqGrids 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方法:

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 ...所以我可以首先请求计数,当它返回然后去获取数据?
  • 重新运行jsonreader功能一旦计数的回报和gridTotal设置
  • 使用状结构的承诺,以解决记录计数

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

回答

2

我希望我正确理解你的问题。在这种情况下,您可以首先从Data端点加载主数据。然后,(里面的loadComplete),您可以手动启动$.ajax请求,以便从伯爵端点获得数据并更新success回调$.ajax的内部的拼版数据。

你需要更新寻呼机是做什么:

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

你可以看到the old answer和使用.updatepager(false, true)的例子。

+0

是的,你对这个问题的理解是准确的,我希望我解释得很好,很好的工作=)...非常好我跑过那个'旧回答',但'pageServer','recordsServer'和'lastpageServer '为空。而不是从使用这些字段的'getGridParam'抓取,我只记得我的jsonreader函数。非常感谢!! @ Oleg #FTW #About – afreeland

+0

@afreeland:不客气! – Oleg