您好,我有一个启用了服务器筛选的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
}
}
答案 0 :(得分:0)
通常不建议在服务器和客户端之间分隔网格数据操作,如documentation中所述:
所有数据操作必须在服务器或客户端上进行。尽管您仍然可以确定部分数据操作将保留在服务器上,而部分数据保留在客户端上,但在其混合数据操作模式下使用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>