2016-03-02 78 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