Встройте Ajax в Web-приложение на основе Rails (исходники)Источник: IBM developerWorks Россия Джек Д. Херрингтон
Если вы не слышали о Rails, то возвращайтесь из путешествия на планету Зортон, так как только там в этом году вы могли быть и не слышать о Ruby on Rails. Rails наиболее привлекателен тем, что позволяет быстро разработать и запустить приложение со всеми функциональными возможностями. Интеграция с Rails, встроенная в библиотеку Prototype.js для Ajax, делает простой быструю разработку так называемых богатых интернет-приложений . В этой статье будут рассмотрены шаги по созданию приложения на Rails. Затем внимание будет уделено использованию возможностей Ajax для построения JavaScript-кода, считывающего и записывающего данные на сервер. Немного о RailsИ все-таки, что такое Rails? Rails - это платформа для Web-приложений, в основе которой лежит язык программирования Ruby. Ruby популярен уже около 10 лет. Так же как Perl и Python, он имеет открытые исходные коды и является гибким языком, предлагающим полную поддержку объектно-ориентированного программирования. Rails - это программная оболочка, которая определяет необходимые модели Web-приложения, такие как Model-View-Controller (MVC). В данном случае, Модель (Model) представлена набором объектов ActiveRecord, которые соответствуют таблицам в базе данных. Составляющая Контроллер (Controller) - это класс Ruby с методами для каждой операции, выполняемой в данной Модели. Вид (View) обычно представлен HTML-кодом, сгенерированным с помощью шаблона ERB (ERB является встроенным в Ruby пакетом текстовых шаблонов), который, по существу, похож на код PHP или JavaServer Pages (JSP). Вид также может быть кодом XML, текстом, JavaScript-кодом, изображениями или тем, что вам нравится. Когда пользователь запрашивает страницу Web-приложения на Rails, URL отсылается через систему маршрутизатора, которая отправляет запрос к Контроллеру. Контроллер запрашивает данные из Модели и оправляет их в Вид для форматирования. Когда вы создаете приложение на Rails, система автоматически генерирует набор каталогов и стартовых файлов. Среди них каталоги для файлов JavaScript, которые поставляются с системой (включая библиотеку Prototype.js), каталоги для Видов, Моделей и Контроллеров и даже место для дополнительных подключаемых модулей, которые можно загрузить у других разработчиков. Начало работы с RailsСамый простой путь для начала разработки Rails-приложения - это использование одной из готовых сборок систем Rails. Если вы работаете в Microsoft® Windows®, я бы рекомендовал использовать Instant Rails. На Macintosh'е - я большой поклонник приложения Locomotive 2. Оба приложения написаны на языке Ruby, имеют структуру Rails, Web-серверы, и встроенный MySQL. После довольно объемной загрузки можно приступать к созданию новых приложений на Rails. Для этой статьи я создал новое приложение - базу данных рецептов, которую назвал Recipe . В нем потребуется лишь одна таблица. В листинге 1 показана миграция базы данных для приложения Recipe. Листинг 1. Перенос базы данных
База данных содержит только одну таблицу: recipes . В таблице пять полей: name, description, ingredients, instructions и пятое поле - уникальный идентификатор, который автоматически поддерживает инфраструктура Rails. Таблица готова, ее необходимо поместить в объект
Базовый класс Формы AjaxНа первом шаге построения приложения Recipe нужно разработать способ добавления рецептов в базу данных. Вначале я покажу стандартный метод создания базовой HTML-формы в Rails для решения данной проблемы. Он начинается с класса Листинг 3. Recipes_controller.rb
Задан только один метод - Шаблон ERB для этой страницы показан в листинге 4.
Страница начинается с сообщений об ошибках объекта Это очень стандартный Rails. Это защищено, безопасно, работает в любом браузере и точно отображается в HTML для клиента. Но я хочу Web 2.0, а вместе с ним и Ajax. Итак, что мне нужно изменить? Со стороны Контроллера код для метода Листинг 5. Recipes_controller.rb
Метод Со стороны шаблона изменения минимальны, что видно в листинге 6. Листинг 6. Заголовок add.rhtml
В начале файла я добавил новый HTML-раздел, содержащий ссылки на файлы JavaScript в Rails. Эти файлы составляют систему Prototype.js, которая выполняет большую часть работы Ajax. После этого я добавляю тег И наконец, я меняю старый вызов Также мне нужен шаблон для метода
И.... это все. Нет, правда! Это конец. Это все, что было нужно для миграции стандартной формы HTML на форму Ajax в Rails. Рисунок 1 показывают готовую для заполнения форму, основанную на Ajax. Следующий шаг - поэкспериментировать с более динамичной интерактивностью, например, с динамическим поиском при помощи Ajax. Динамический поиск в AjaxPrototype.js обеспечивает функциональность просмотра полей и форм на странице. Я использую эту функциональность для работы с текстовым полем поиска, в которое я могу ввести часть рецепта. Затем файл запускает метод поиска в Листинг 8. Recipes_controller.rb
Метод
В начале листинга 9 я снова подключаю библиотеки JavaScript. После этого я создаю форму form с полем поиска и тегом Код для формы search_ajax.rhtml показан в листинге 10.
Так как поиск может вернуть множество результатов, я делаю цикл по списку рецептов и вывожу их имена и описания. Когда я открываю сайт в браузере и набираю в поисковой строке Рисунок 2. Динамический поиск в Ajax Это все, что касается основ. Но что если я хочу получить больше информации о рецепте яблочного коктейля? Могу ли я использовать Ajax для получения списка ингредиентов и инструкций по требованию? Я рад, что вы спросили. Конечно, могу! Добавление контента по запросуИногда есть смысл в том, чтобы предоставить пользователю возможность загружать дополнительную информацию, а не отображать ее на странице. Обычно разработчики используют скрытый тег Листинг 11 показывает шаблон рецепта с добавленным вызовом вспомогательного метода
Метод Для получения большего количества информации я добавляю еще один метод в Листинг 12. Recipes_controller.rb
И наряду с этим мне нужен шаблон для дополнительной информации, называемый get_extra_ajax.rhtml. Листинг 13 показывает этот шаблон. Листинг 13. Get_extra_ajax.rhtml
И теперь, заходя на страницу и набирая Рисунок 3. Ссылка на дополнительную информацию, включающую в себя ингридиенты и инструкции Теперь, когда я нажимаю на ссылку, браузер использует Ajax для получения дополнительного материла с Web-сервера и его отображения. Вы можете увидеть этот процесс на рисунке 4. Рисунок 4. Дополнительная информация о рецептах Такой шаблон использования Ajax особенно удобен, когда вы имеете дело со строчными данными или детализированным отчетом, в которых поиск дополнительной информации по каждой записи требует больших затрат, следовательно, имеет смысл делать это лишь по требованию. Плюс эта техника экономит место на экране. Возможно, самой горячей возможностью Web 2.0 являются текстовые поля с автозаполнением. Какое же рассмотрение Ajax будет полным без одного из них? Поля с автозаполнениемRails делает создание полей с автозаполнением до смешного простым. Во-первых, я добавляю новые элементы в шаблон index.rhtml. Обновленная версия показана листинге 14. Листинг 14. Обновление index.rhtml
Блок каскадных стилей (CSS) в начале файла используется для создания выпадающего списка автозаполняемых элементов. После этого я сделал маленькое добавление в Метод Листинг 15. Recipes_controller.rb
Этому коду для построения списка требуется еще один шаблон ERB, как показано в листинге 16. Листинг 16. Autocomplete_recipe_list.rb
Система автозаполнения ищет список HTML ( Чтобы увидеть систему автозаполнения в действии, в браузере я перехожу на страницу и набираю Рисунок 5. Выпадающий список автозаполнения Я могу использовать стрелки "вверх" и "вниз" для выбора элемента и кнопку "ввод" для подтверждения выбора. Выбранный элемент помещается в текстовое поле. Это быстрое решение и - благодаря архитектуре Rails - легко осуществимое. ВердиктЯ не постесняюсь сказать: "Я люблю Rails!" Конечно, я спотыкался, начиная его использовать. Насколько я видел в сети, спотыкалось большинство разработчиков. А почему бы и нет? Rails позволяет с невероятной легкостью строить высокоинтерактивные Web-приложения. Даже если вы не собираетесь покупать приложение Rails, я бы порекомендовал вам загрузить Instant Rails или Locomotive и опробовать их. Вам понравится - и вы узнаете о многом таком, что могли бы использовать в своих приложениях на Java PHP или Microsoft .NET. Может даже случиться так, что вы захотите полностью перейти на Rails. |