使用amplifyjs自动完成

时间:2011-11-24 13:30:27

标签: jquery-ui jquery-ui-autocomplete

我试图将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本身。有什么想法吗?

2 个答案:

答案 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自动完成提供一个函数,在此函数中只需设置请求对象,自动填充数据将填充您提供的数据。