剑道ui版本2015.2.805
我在kendo文档中为每个示例配置了kendo下拉列表,用于对数据进行分页。它适用于页面1,使用take/skip参数从服务器加载80个条目。当我将列表向下翻到应该加载新项目的位置时,我可以在fiddler中看到小部件正在请求take=80、skip=80 (这是第2页),而服务器正在返回所请求的记录。但是这个小部件只是一遍又一遍地重新请求同一页,直到我停止它。在此期间,未加载的条目将通过动画微调器在列表中显示为“正在加载”。
要进行虚拟化,这个小部件需要一个valueMapper (我使用的是较旧的kendo UI,所以它是必需的)。我已经实现了它,虽然我不清楚它应该返回什么(我相信的项目索引),但我从文档中知道,如果它请求一个不存在的值来返回[],这就是我在这种情况下所做的。我修改了convertValues函数,只发送一个索引,而不是示例数组,但是valueMapper只在初始化时调用一次,所以我返回的任何错误都不会对这个问题产生任何影响(我相信)。
当小部件第一次在fiddler中初始化时,我看到valueMapper被调用,值为-1,服务器返回[],然后小部件调用分页数据(take=80,skip=0),服务器返回分页数据,小部件正常显示数据。
当我向下翻页到未加载的项目时,小部件调用第二页数据(take=80、skip=80),服务器返回它,但小部件不断地重新请求数据。小部件在第一次调用之后从不调用valueMapper (这可能是正常的)。
我为height和itemHeight设置了正确的页面大小,但这只会导致页面1加载两次(实际上并非如此)。
下面是设置:
wizard.paramMap = function (data, type) {
var params = {};
params.take = data.take;
params.skip = data.skip;
return params;
};
$("#clientField").kendoDropDownList({
autoWidth: true,
dataTextField: "text",
dataValueField: "value",
virtual: {
itemHeight: 26,
valueMapper: function(options) {
$.ajax({
url: resturi + "clientlist/valueMapper",
dataType: "json",
type: "GET",
data: convertValues(options.value),
success: function (data) {
console.log("valueMapper = " + data)
options.success(JSON.parse(data));
}
})
}
},
height: 520,
dataSource: {
transport: {
read: {
url: resturi + "clientlist",
dataType: "json",
type: "get"
},
parameterMap: wizard.paramMap
},
schema: {
data: function (response) {
console.log("clientlist = " + response);
var o = JSON.parse(response);
return o;
}
},
pageSize: 80,
serverPaging: true
}
});
function convertValues(value) {
var data = {};
value = $.isArray(value) ? value : [value];
for (var idx = 0; idx < value.length; idx++) {
//data["values[" + idx + "]"] = value[idx];
data["values"] = value[idx];
break;
}
return data;
}发布于 2017-01-15 08:01:47
数据源返回的数据必须返回记录总数以及分页数据。这与kendo datagrid中的分页相同。因此,将服务器输出更改为:
{"total":X,"data":[...some data...]}以及用于以下各项的架构:
schema: {
total: function (response) {
return (JSON.parse(response).total);
},
data: function (response) {
return (JSON.parse(response).data);
}
}修复了问题。
https://stackoverflow.com/questions/41653556
复制相似问题