[英]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.