我对Kendo UI AutoComplete组件感到疯狂。我正在使用自己的函数来使用jQuery访问数据,因此我必须将AutoComplete dataSource.transport.read设置为函数。代码是这样的。
minLengthAtocomplete = 3;
$('#autocomplete').kendoAutoComplete({
minLength : 3,
filter : "contains",
dataValueField : "key",
dataTextField : "value",
dataSource : new kendo.data.DataSource({
transport : {
read : _OnTransportRead
},
schema : {
/* object schema */
}
})
});
function _OnTransportRead(e) {
var text = $.trim(e.data.filter.filters[0].value);
if (text && text.length >= minLengthAtocomplete) {
_GetUsers(
text,
function onSuccess(data) {
var users = [];
/* sets users with info in data */
e.success(users);
},
function onError(error) {
/* stuff with error */
}
);
}
}
function _GetUsers(userName, onSuccess, onError) {
/* Ajax to get users from DB */
}
此代码运行完美,但 dataSource.transport.read 仅调用一次。我使用文本'michae'进行第一次搜索,AutoComplete组件按预期运行其dataSource.transport.read。然后,我再添加一个字母来搜索'michael',并且再也不会调用dataSource.transport.read。太令人沮丧了!
我尝试使用autoSync dataSource属性,手动dataSource Sync,在AutoComplete dataBound上设置新的dataSource对象,但没有运气。
我做错了什么?我忘记了什么?
提前致谢。
答案 0 :(得分:25)
您应该启用serverFiltering,以便数据源每次都发出请求。
$('#autocomplete').kendoAutoComplete({
minLength : 3,
filter : "contains",
dataValueField : "key",
dataTextField : "value",
dataSource : new kendo.data.DataSource({,
serverFiltering: true,
transport : {
read : _OnTransportRead
},
schema : {
/* object schema */
}
})
});