我有一个绑定到KendoUI自动完成小部件的文本框。 JS代码如下所示:
var dataSourceImeSearch = {
type: "json",
transport: {
read: {
url: "@Url.Action("ImeSearch")",
contentType: "application/json; charset=utf-8",
type: "POST"
},
parameterMap: function (data, type) {
if (type == "read") {
if (data.filter) {
data = $.extend({ sort: null, filter: data.filter.filters[0] }, data);
} else {
data = $.extend({ sort: null, filter: null }, data);
}
return JSON.stringify(data);
} else {
return JSON.stringify({ model: data });
}
}
},
batch: false,
pageSize: 10,
serverPaging: true,
serverFiltering: true,
serverSorting: true,
schema: {
errors: "Errors",
data: "Data",
total: "TotalRecordCount",
model: myModel
},
error: function (e) {
if (e.errors) {
alert(e.errors);
}
}
};
$("#Ime").kendoAutoComplete({
dataTextField: "PunoIme",
filter: "contains",
minLength: 3,
dataSource: dataSourceImeSearch
});
我在这里遇到一件奇怪的事。自动完成功能的工作方式是,当我键入运行到服务器的第三个字符并从那里获取JSON数据并显示前十个结果。问题是这个文本框正在搜索大型数据集,因此对于一些说4个字符的查询,结果集可以超过1000个项目。由于某种原因,窗口小部件没有计算出超过10个结果,当我在显示的自动完成下拉列表中向下滚动时,它不会触发任何搜索第二页等等。您可以看到数据源的serverPaging
设置为true
,但这没有帮助。
感谢任何帮助。谢谢。
答案 0 :(得分:3)
我在发布此问题后发现Autocomplete小部件不允许按设计分页。一些剑道员工在KendoUI论坛中解释了这一点,作为一个不良用户体验的例子(如果你有需要分页的自动完成)。我认为,因为在我看来,自动完成的第一个用例是在搜索一个人的情况下,在这里我正是这样做的。唯一的问题是,如果你按人的第二个名字进行搜索,你可能会在前3个或4个字符之后得到数百个结果,你真的需要分页。如果剑道人认为这是一个糟糕的用户体验,那么应该在自动完成文档中清楚地提到这一点,我真的没有在一个地方找到任何提及它,人们会认为它可能是一个好的想要向人们提及这样的事情,以便他们不必浪费一整天来弄清楚出了什么问题。
在我看来,在KendoUI网络演示页面的所有演示中最糟糕的用例示例之一是Shared DataSource示例,如果您在顶部的自动填充文本框中键入“ch”,您将最终10个结果是自动完成,但数据网格中有14个。我真的觉得愚蠢,剑道没有人认为这种行为很奇怪。
所以我对自己问题的回答如下:不要使用自动完成,除非是一些非常简单的用例(我真的不能想到一个有意义的单一用法)。我最终制作了一个包含5个文本框和搜索按钮的整个搜索表单,以防我希望能够使用2个文本框(一个具有自动完成功能)和一个搜索按钮。
答案 1 :(得分:0)
您已设置pageSize:10,这意味着只有10条记录返回到AutoComplete,其dataSource只包含10个元素,我担心默认情况下不会实现自动分页