Как обрабатывать ошибки удаленного источника данных с помощью виджета автозаполнения YUI3? - PullRequest
2 голосов
/ 03 апреля 2012

При использовании виджета автозаполнения YUI3 с источником URL, который возвращает данные JSON, существует ли простой способ обнаружения ответов об ошибках HTTP?

Пример:

Y.one('#ac-input').plug(Y.Plugin.AutoComplete, {
    resultHighlighter : 'phraseMatch',
    source : "http://example.com/api/item/search/?q={query}",
});

(Например, если пользователь не прошел проверку подлинности на этом сервере, виджет автозаполнения получает ответ 401 и молча завершается с ошибкой, но регистрирует ошибку на консоли.)

Я искал, но не нашел документацию, относящуюся к этой проблеме - дайвинг также не помог.Я думаю Мне придется свернуть свой собственный объект источника данных, чтобы я мог выполнить запрос и обнаружить ошибку.

Или есть более простой способ передачи обработчика событий ошибки в виджет автозаполнения YUI3 для этого типа источника данных?

Редактировать : См. my followответ для простого решения, используя Y.on('io:failure').

Ответы [ 2 ]

1 голос
/ 02 мая 2012

Простое решение: использовать глобальный обработчик событий сбоя ввода-вывода.Он работает без сложности объекта DataSource.IO, как описано в этого ответа .

Хотя я предпочел бы обрабатывать ошибку локально в обработчиках событий виджета AutoComplete, увы, я ненашел простой способ сделать это.

Использование Y.on('io:failure') обработки событий может быть гораздо более прямым подходом, если все, что вам нужно сделать, это отобразить информацию об ошибках связи.

//
// Handle IO failure event
function ioFailureFunction(transaction, xhrObject) {
    errCode = xhrObject.status;
    // Insert the current error status into an HTML element...
    Y.one('#error').setContent(errCode);
};
Y.on('io:failure', ioFailureFunction);

Обоснование : IВыяснилось, что использование метода DataSource.IO, описанного в , в этом ответе может создать значительную сложность, поэтому, если у вас есть простые потребности, этот метод целесообразен и работает с простыми конфигурациями автозаполнения - таким образом, вы можете сохранить свое автозаполнениеКонфиг простой и по-прежнему обрабатывать ошибки ввода-вывода ...

1 голос
/ 05 апреля 2012

Я думаю, Y.DataSource - это простой способ передать обработчик ошибок.Вы должны быть в состоянии сделать что-то вроде:

var ds = new Y.DataSource.IO({
  source: 'http://example.com/api/item/search/'
});

ds.set('ioConfig', {
    on: {
        failure: function (transactionID, ioResponseObj, args) {
            ...
        }
    }
};

Y.one('#ac-input').plug(Y.Plugin.AutoComplete, {
  requestTemplate: '?q={query}',
  source: ds
});

Это из просмотра вызова функции apply в конце faultHandler .

Конечнообратите внимание, что применяются такие же политики происхождения .

...