/main.html: Main

Запросы к IOWA обычно обслуживаются комбинацией HTML-шаблонов и компонентов IOWA. Парные файлы имеют одинаковое базовое имя, но разные расширения. Принимаемый по умолчанию шаблон/объект называется Main, так что приложение состоит из файлов Main.html и Main.iwa.

Файлы с расширением .iwa представляют собой программы на Ruby; такое расширение в IOWA используется для того, чтобы отличить их от прочего кода, который может входить в состав приложения. Эти файлы играют ту же роль, что классы контроллеров в Nitro и Rails. Определенные в классе компонента методы доступны из соответствующего HTML-файла.

Демонстрационный файл Main.html выглядит так:

<html>

 <head><title>Текущее время...</title></head>

 <body>

  <р>Текущее время @now.</p>

  <р>Счетчик равен @count.</p>

  <а oid='reload'>RELOAD</a>

 </body>

</html>

В шаблонах IOWA можно смешивать обычный HTML-код и переменные экземпляра компонента. Отметим, что переменные необязательно «интерполировать» обычным способом, достаточно просто включить их в разметку.

Имеется также специальная переменная oid, IOWA использует ее для динамического изменения шаблона в процессе прорисовки. В нашем примере с ее помощью создается ссылка на метод reload из класса компонента, определенного в файле Main.iwa. Если задержать мышь над этой ссылкой в полученной странице (или посмотреть ее исходный текст), то вы увидите URL следующего вида:

http://127.0.0.1:2000/main.html/6b38f6fb-4f087af7-ab6JaqUM9KyWE.a.1.7

Такие URL позволяют IOWA отслеживать состояние сеанса. Если несколько раз щелкнуть по ссылке, то вы увидите, что URL изменяется. Если вручную восстановить предыдущее значение, вы получите состояние сеанса, соответствующее URL.

В данном случае состояние — это значение переменной экземпляра @count. Вот как выглядит файл Main.iwa:

class Main < Iowa::Component

 attr_accessor :count

 def awake

  @count = 0

 end

 def setup

  @count += 1

 end

 def now

  Time.now.asctime

 end

end

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, что выводить на каждой итерации, поэтому в конце файла

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату