簡體   English   中英

Kendo Grid具有服務器過濾功能,但客戶端分頁

[英]Kendo Grid with server filtering but client side paging

您好,我有一個啟用了服務器篩選的kendo網格,並且由於復雜的sql腳本和性能優化,我一次加載了所有數據,因此將serverPaging設置為false。 但是,當我單擊網格中的下一頁按鈕或更改頁面大小時,我始終向服務器發送新請求,並將再次加載相同的數據。 有什么方法可以啟用服務器篩選並設置我的網格以進行clinet側分頁嗎? 這是我的網格對象的構造函數參數。

{
    dataSource: {
        serverFiltering: true,
        pageSize: 10,
        transport: {
            read: {
                url: "url",
                dataType: "json",
                type: 'POST',
                contentType: "application/json;charset=UTF-8"
            },
            parameterMap: function (data) {
                return JSON.stringify(data);
            }
         }
    },
    columns[...],
    pageable: {
        pageSizes: [10, 25, 50, 100],
        buttonCount: 3
    }
}

通常不建議在服務器和客戶端之間分隔網格數據操作,如文檔中所述:

所有數據操作必須在服務器或客戶端上進行。 盡管您仍然可以確定部分數據操作將保留在服務器上,而部分數據保留在客戶端上,但在其混合數據操作模式下使用DataSource會導致意外的副作用。 例如,如果serverPaging啟用和serverFiltering被禁用,數據源會從當前頁面只過濾數據,用戶將看到更少的結果比預期的。 在其他情況下,DataSource發出的請求可能會超過執行數據操作所需的請求。

似乎最后一部分適用於您的方案。 一種可能的解決方法是將transport.read作為函數實現,這使您可以完全控制如何檢索數據。 您可以使用以下方法將數據緩存在瀏覽器中,然后重新使用:

<script>
var resultCache;
var dataSource = new kendo.data.DataSource({
  serverFiltering: true,
  pageSize: 10,
  transport: {
    read: function(options) {
      if (resultCache != null) {
        options.success(resultCache);
      } else {
        $.ajax({
          url: "url",
          dataType: "json",
          success: function(result) {
            resultCache = result;
            // notify the data source that the request succeeded
            options.success(result);
          },
          error: function(result) {
            // notify the data source that the request failed
            options.error(result);
          }
        });
      }
    }
  }
});
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM