Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ajax_v_deystvii.pdf
Скачиваний:
34
Добавлен:
05.03.2016
Размер:
5.83 Mб
Скачать

рировать отклики JSON (см. главу 3), хотя они ближе к тому, что в главе 5 называлось подходом, ориентированным на данные.

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

ajaxUpdate: function(request){this.runScript(request.responseText);' runScript: function(scriptText){eval(scriptText);},

Как обсуждалось выше, обработка ответа слишком проста. Все, что мы делаем, — это вызываем метод runScript О с параметром responseText ("текст ответа"), и runScript () применяет функцию eval () к тексту отклика. У вас может возникнуть вопрос: "Почему бы вообще не избавиться от метода runScript () и просто вызывать eval() из метода aj axUpdate () ?" Да, это действительно допустимый и полезный подход. Тем не менее иногда удобно иметь метод, инкапсулирующий концепцию запуска сценария. Например, что будет, если мы добавим в реализацию runScript () этап предварительной или последующей обработки? Опять же мы изолировали место изменения. К счастью, метод a j axUpdate () не замечает изменения, и мы получаем новое поведение. Одной из интересных сфер применения описанной технологии может быть препроцессор, выполняющий замещение значений, перед выполнением функций, располагающихся на стороне клиента.

В завершение обсуждения обработки Ajax рассмотрим первостепенную по важности тему обработки ошибок. В связи с этим напомним, что метод handleError (), так же, как и метод ajaxUpdate(), является неявным контрактом, требуемым для сообщения с net. ContentLoader. Реализация метода handleError () приведена ниже.

handleError: function(request) {

if (this.options.messageSpanld) document.getElementById

( t h i s . o p t i o n s .messageSpanld) .innerHTML «•

"Oops! S e r v e r e r r o r . P l e a s e t r y a g a i n l a t e r . " ; } .

Данный метод проверяет существование конфигурационного свойства messageSpanld и при его наличии использует его в качестве элемента, отображая сообщение "Oops!" в пользовательском интерфейсе. Фактический текст сообщения также можно представить как параметр с помощью объекта опций. Сделать это предлагается читателям в качестве самостоятельного упражнения.

Таким образом, мы завершаем разговор о реструктуризации компонентапортала. Мы создали обманчиво простой механизм, поддерживающий управление порталом на основе Ajax. Потратим несколько минут и подытожим, чего же мы добились в ходе реструктуризации.

11.6.5. Выводы

По нескольким параметрам разработка данного компонента достаточно отличается от всех остальных примеров, приведенных в данной книге. Во-первых, мы разработали крупномодульный компонент, предоставляющий возможно-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]