Kendo ui Kendo从远程服务获取数据,在本地进行分页
代码:Kendo ui Kendo从远程服务获取数据,在本地进行分页,kendo-ui,kendo-datasource,Kendo Ui,Kendo Datasource,代码: var url=base\u url+“/api/v1/users/getUsers”; var dataSource=new kendo.data.dataSource({ 运输:{ 阅读:功能(选项){ $.ajax({ 键入:“GET”, url:url, 数据类型:“json”, 数据:{searchTerm:$(“#searchTerm”).val().trim()}, 成功:功能(结果){ 选项。成功(结果); }, 错误:函数(结果){ 选项。错误(结果); } }); }
var url=base\u url+“/api/v1/users/getUsers”;
var dataSource=new kendo.data.dataSource({
运输:{
阅读:功能(选项){
$.ajax({
键入:“GET”,
url:url,
数据类型:“json”,
数据:{searchTerm:$(“#searchTerm”).val().trim()},
成功:功能(结果){
选项。成功(结果);
},
错误:函数(结果){
选项。错误(结果);
}
});
}
},
模式:{
数据:功能(结果){
返回结果.model;
},
总计:功能(结果){
返回result.model.length;
},
},
页面大小:5
});
$(“#匹配”).kendoListView({
数据源:数据源,
autoBind:false,//如果设置为false,则小部件在初始化期间不会绑定到数据源。
模板:kendo.template($(“#matchesListViewTemplate”).html()
});
$(“#寻呼机”).kendoPager({
数据源:数据源,
自动绑定:错误
});
$(文档)。按键(功能(e){
如果(e.which==13){
e、 预防默认值();
var searchTerm=$(“#searchTerm”).val().trim();
如果(searchTerm.length<1)
回来
dataSource.read();
dataSource.page(1);//再次调用远程服务
}
});
因为数据源是远程的,所以当我们调用dataSource.page(1)时,kendo向远程服务发出另一个调用。此行为描述如下:
如果您正在执行服务器端分页,那么执行grid.dataSource.page(1)就足够了,因为这将完全按照您已经实现的方式调用读取
我必须更改什么,以便在使用新的searchTerm搜索后,API调用只执行一次,pager将转到第1页而不进行另一次调用
我尝试了dataSource.query(),但还是没有成功?我希望我已经做了足够的演示。解决方案是在dataSource.read()获取数据/完成时调用dataSource.page(1)
var url = base_url + "/api/v1/users/getUsers";
var dataSource = new kendo.data.DataSource({
transport: {
read: function (options) {
$.ajax({
type: 'GET',
url:url,
dataType: 'json',
data: { searchTerm: $("#searchTerm").val().trim() },
success: function (result) {
options.success(result);
},
error: function (result) {
options.error(result);
}
});
}
},
schema: {
data: function (result) {
return result.model;
},
total: function (result) {
return result.model.length;
},
},
pageSize: 5
});
$("#matches").kendoListView({
dataSource: dataSource,
autoBind: false, // if set to false the widget will not bind to the data source during initialization.
template: kendo.template($("#matchesListViewTemplate").html())
});
$("#pager").kendoPager({
dataSource: dataSource,
autoBind: false
});
$(document).keypress(function (e) {
if (e.which == 13) {
e.preventDefault();
var searchTerm = $("#searchTerm").val().trim();
if (searchTerm.length < 1)
return;
dataSource.read();
dataSource.page(1); // makes another call to the remote service
}
});
$(文档)。按键(功能(e){
如果(e.which==13){
e、 预防默认值();
var searchTerm=$(“#searchTerm”).val().trim();
如果(searchTerm.length<1)
回来
dataSource.read().done(函数()){
//如果远程服务返回空结果集(但仍然是http 200代码)
//page()发出另一个请求(如果data()为空,则发出另一个请求)
//因此,我们必须检查数据长度/总长度
如果(dataSource.total()>0)
数据源。第(1)页;
}
});
如果读取请求的响应尚未到达或发生错误,则允许另一个读取请求(以获取数据)。DataSource.read()异步发出请求,然后DataSource.page(1)开始执行。DataSource.page(1)函数检查是否有任何数据读取,如果没有,它将再次执行读取方法-因此,正如您所提到的,我们得到了两个调用。由于异步调用,这种情况可能会发生
$(document).keypress(function (e) {
if (e.which == 13) {
e.preventDefault();
var searchTerm = $("#searchTerm").val().trim();
if (searchTerm.length < 1)
return;
dataSource.read().done(function() {
// in case remote service returns empty result set (but still http 200 code)
// page() makes another request (if data() is empty it makes another request)
// therefore we must check data length/total
if( dataSource.total() > 0)
dataSource.page(1);
}
});