Как расширить скрипт автозаполнения? - PullRequest
4 голосов
/ 08 февраля 2011

Автозаполнение в script.aculo.us ожидает, что ответ сервера представляет собой список <ul>.Есть ли какой-нибудь способ для меня расширить или заменить это поведение, чтобы он мог принимать ответ сервера, который является документом XML или JSON вместо этого?список автозаполнения?

1 Ответ

3 голосов
/ 14 февраля 2011

Да, вы можете расширить поведение автозаполнения script.aculo.us. Вы делаете это путем переопределения метода onComplete кодом, который обрабатывает данные json и создает для вас список <ul>. Этот список должен быть отправлен на updateChoices.

Скажем, вы получите следующий ответ JSON при поиске "U":

[
  "Unicorn",
  "University"
]

Пример расширения Ajax.Autocompleter, которое может обрабатывать ответ выше:

var MyCompleter = Class.create(Ajax.Autocompleter, {

    initialize: function($super, id_search, id_list, url, options) {
        $super(id_search, id_list, url, options);
    },

    onComplete: function(response) {
        var text = response.responseText;
        if (text.isJSON()) {
            this.handleJSON(text.evalJSON());
        }
        // else do nothing
    },

    handleJSON: function(json) {
        var htmlStr = '<ul>';
        json.each(function(item) {
            htmlStr += '<li>';
            htmlStr += item;
            htmlStr += '</li>';
        });
        htmlStr += '</ul>';
        this.updateChoices(htmlStr);
    }

});

Существует также пример того, как заменить поведение сброса ширины автозаполнения .

...