автозаполнение с амплификацией - PullRequest
1 голос
/ 24 ноября 2011

Я пытаюсь использовать jqueryui autocmplete с ampifyjs. Это позволяет переключаться между вызовом на реальные данные сервера и некоторыми жестко закодированными данными и обеспечивает дополнительную гибкость.

Пока я не знаю, как заставить jqueryui усиливать автозаполнение вызова, чтобы обновить себя и выполнить поиск. У меня есть следующие коды:

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 ]

2 голосов
/ 28 ноября 2011

Это близко к тому, что вы хотите, но вы забыли передать поисковый запрос.Ваш код должен быть:

$( 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 голос
/ 24 ноября 2011

Я выполнил следующее решение:

autocomplete({
              source: function(request, response){
              amplify.request('resId', function(data){
                      response(data);
                    });
              },

Таким образом, вы можете предоставить функцию автозаполнения jquery.ui, и в этой функции просто установите объект запроса, и данные автозаполнения будут заполнены данными, которые выобеспечить.

...