Книга: Программирование на языке Ruby

19.6.3. Передача управления компоненту

19.6.3. Передача управления компоненту

Бывает полезно разнести логику приложения по нескольким классам компонентов. Мы видели, как можно отобразить URL на компоненты. Имеется также способ передать управление, не изменяя базового пути в URL.

Добавим в файл Main.iwa метод для обработки щелчка по ссылке в меню десертов:

def dessert_choice
 new_page = page_named( 'DessertChoice')
 new_page.choice = @dessert_item
 yield new_page
end

Также изменим цикл формирования списка десертов в Main.html:

<ul oid="dessert_list">
 <li><a oid= 'dessert_choice'>@dessert_item</a></li>
</ul>

Тут происходит немало интересного; атрибут oid элемента ul управляет формированием цикла, а такой же атрибут элемента а создает специальную ссылку на только что добавленный метод dessert_choice. Для довершения дела странице передается еще и текст ссылки (хотя и несколько загадочным способом). Метод dessert_choice сам по себе короткий, в нем вызывается метод page_named для создания экземпляра еще одного класса компонента DessertChoice. Для передачи выбранного десерта вызывается метод choice=. Затем yield передает управление новому компоненту.

Новый компонент также определяется с помощью пары файлов с расширениями .iwa и .html. Вот код класса:

class DessertChoice < Iowa::Component
 attr_accessor :choice
 def details
  "Детали #{@choice} нужно было брать из базы данных."
 end
end

А в файле DessertChoice.html хранится разметка:

<html>
 <head><title>Выбранный вами десерт</title></head>
 <body>
  <h1>Десерт!</h1>
  <p>@details</p>
 </body>
</html>

Об IOWA можно было бы рассказывать еще долго. Для получения дополнительной информации зайдите на домашнюю страницу IOWA (http://enigo.com/proiects/iowa/) или на страницу проекта IOWA на сайте RubyForge (http://rubyforge.org/projects/iowa).

Оглавление книги


Генерация: 1.526. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз