Чтение онлайн

на главную - закладки

Жанры

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

Демонстрационный файл

Main.html
выглядит так:

<html>

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

 <body>

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

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

<а 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.

 </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>

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

Main.iwa
после определения класса добавим раздел определения связей:

<?

 dessert_list {

 item = dessert_item

 list = desserts

} ?>

Тем самым производится связывание списка

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

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>

Поделиться:
Популярные книги

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Мастер 9

Чащин Валерий
9. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер 9

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Дважды одаренный. Том II

Двойник Короля 5

Скабер Артемий
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Двойник Короля 5

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Дитя прибоя

Трофимов Ерофей
Дитя прибоя
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Дитя прибоя

Моров. Том 8

Кощеев Владимир
7. Моров
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Моров. Том 8

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая