Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
}
</style>
</head>
#{content}
</html>
Теперь воспользуемся новым элементом в файле
template/books/find.xhtml
<Layout title='Details for #{@title}'>
<h1>#{@title}</h1>
<h2>#{@author}</h2>
<p>Page last updated: #{@last_update}</p>
</Layout>
Все содержимое элемента
Layout
content
layout.xhtml
Layout
@title
layout.xhtml
Вам это напоминает вызов метода с передачей ему аргументов? Так оно и есть. Мы можем определить разметку в виде класса Ruby (
src/element/layout2.rb
require 'nitro/element'
class Layout2 < Nitro::Element
def render
%^<html>
<head>
<title>#{@title}</title>
<style>
body {
background-color: white; font-family: sans-serif;
}
</style>
</head>
#{content}
</html>^
end
end
А затем изменим файл
find.xhtml
Layout2
run.rb
Часто встречаются большие фрагменты кода, содержащие логику, общую для нескольких приложений. Например, во многих Web-приложениях есть понятие учетной записи пользователя и авторизации. Чем заново писать код для каждой такой программы, можно включить уже готовый: это сэкономит время и упростит сопровождение.
Такой вид повторного использования называется частью. Часть (part) — это, по существу, мини-сайт, реализующий одну конкретную функцию. (В дистрибутив Nitro входит одна такая часть под названием
Admin
run.rb
Естественно, части хранятся в папке
part
<app_root>/part/users
<app_root>/part/users.rb
<app_root>/part/users/public/
<app_root>/part/users/controller.rb
<app_root>/part/users/model/user.rb
<app_root>/part/users/model/acl.rb
<app_root>/part/users/template/login.xhtml
<app_root>/part/users/template/form.xinc
<app_root>/part/users/run.rb
Главный файл
run.rb
require
require 'part/users'
Теперь Nitro будет рассматривать весь код в каталоге
part/users
part
template
Часто приложение должно отображать повторяющиеся данные; обычно они оформлены в виде HTML-таблицы в шаблоне. Если число строк заранее не известно, то придется обойти какой-то набор.
Можно встроить код Ruby непосредственно в шаблон, но Nitro предлагает специальный механизм конвейерной компиляции, чтобы упростить программирование типичных логических конструкций.
Конвейерная компиляция — это последовательность преобразований, которым подвергаются шаблоны по мере объединения в действия. Существуют классы преобразования для различных задач, в частности статического включения файлов, XSLT-преобразований и локализации. Класс
Morphing
В нашем демонстрационном приложении данных мало, но если представить себе много авторов, каждый из которых написал несколько книг, то можно было бы показать список книг данного автора. Метод контроллера поместил бы в переменную
@books
<h4>Books by #{@author}</h4>
<ul>
<li each="book in @books" > #{book.title}</li>
</ul>
Класс
Morphing
<?r for book in @books ?>
<li>#{book.title} </li>
<?r end ?>
Порожденная таким образом разметка передается следующему этапу конвейера.
Точно так же для повтора элемента можно использовать атрибут
times
<img src='/img/ruby.png' alt='*' times='@book.rating' />