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

19.6.2. Шаблоны в IOWA

19.6.2. Шаблоны в IOWA

Большинство Web-приложений только выигрывает от разделения кода и шаблонов представления, но IOWA, как и Nitro, позволяет вообще обходиться без компонентов и помещать весь код на Ruby в представление. Ниже приведен файл PureView.html, содержащий как код класса, так и HTML-разметку:

<%
 class PureView < Iowa::Component
  def right_now
   Time.now
  end
 end
%>
<html>
 <head><titlе>Автономный вид</title></head>
 <body>
  <р>Текущее время @right_now.</p>
 </body>
</html>

Но, в отличие от Nitro, это работает только в том случае, когда для представления нет соответствующего компонента. Если имеются оба файла, то IOWA не станет анализировать код, встроенный в HTML-файл.

Шаблон может содержать циклы и условные предложения. Добавим такой метод в файл Main.iwa:

def after_dinner?
 Time.now.hour >19
end

Тогда можно реализовать в Main.html условную прорисовку с помощью элемента if:

<if oid='after_dinner?'>
 <р>Обед закончен. Что на десерт?</р>
</if>

Хороший вопрос! Что на десерт? Пусть IOWA и ответит. Мы поручим Main.iwa подготовить меню десертов в виде массива:

def desserts
 %w{
  Пирожные
  Печенье
  Фрукты
  Мороженое
 }
end

А в файле Main.html выведем его. Изменим содержимое элемента if, включив список десертов:

<р>Обед закончен. Вот что мы можем предложить на десерт:</р>
<ul oid="dessert_list">
 <li>@dessert_item</li>
</ul>
</if>
<p>

Мы еще должны сообщить IOWA, что выводить на каждой итерации, поэтому в конце файла Main.iwa после определения класса добавим раздел определения связей:

<?
 dessert_list {
 item = dessert_item
 list = desserts
} ?>

Тем самым производится связывание списка dessert_list в шаблоне. На каждой итерации элемент списка заполняется из переменной dessert_item, а данные в целом поступают от метода компонента desserts.

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


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