我试图将jqueryui autocmplete与amplifyjs一起使用。这可以在调用真实服务器数据和一些硬编码数据之间切换,并提供额外的灵活性。
目前我不知道如何让jqueryui自动完成调用放大来刷新自己并执行搜索。我有以下codesnippet:
amplify.request.define('resId', 'ajax', {
url: 'autocmpleteUrl',
dataType: "json",
type: "POST"
});
$(elementId).autocomplete({
minLength: 1,
source: 'some url',
delay: 0,
focus: function (event, ui) {
$(elementId).val(ui.item.label);
return false;
},
select: function (event, ui) {
$(elementId).val(ui.item.label);
return false;
}
}).data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "</a>")
.appendTo(ul);
};
我知道在自动完成部分它可以是url和json数据。但我无法弄清楚如何使它处理放大并使其成为如果用户输入文本jquery自动完成请求放大,而不是url本身。有什么想法吗?
答案 0 :(得分:2)
这与您想要的很接近,但您忘记将搜索字词传递给您的请求。你的代码应该是:
$( elem ).autocomplete({
source: function( request, response ) {
amplify.request( "resId", request, function( data ) {
response( data );
});
});
});
将搜索字词作为term
查询参数发送。由于您正在直接传递数据,因此也可以减少:
$( elem ).autocomplete({
source: function( request, response ) {
amplify.request( "resId", request, response );
});
});
但是,在这两种情况下,您都没有处理错误,这意味着您可以无限期地将自动完成保留在搜索状态中。您应该使用完整的amplify.request
表单来处理错误:
$( elem ).autocomplete({
source: function( request, response ) {
amplify.request({
resourceId: "resId",
data: request,
success: response,
error: function() {
response( [] );
}
});
});
});
答案 1 :(得分:1)
我已经完成了以下解决方案:
autocomplete({
source: function(request, response){
amplify.request('resId', function(data){
response(data);
});
},
因此,您可以为jquery.ui自动完成提供一个函数,在此函数中只需设置请求对象,自动填充数据将填充您提供的数据。