Книга: Программирование на языке Ruby
19.4.5. Прочие детали
19.4.5. Прочие детали
В Nitro слишком много различных механизмов, чтобы все их можно было рассмотреть здесь. Но в этом разделе мы упомянем некоторые особенно приятные «вкусности».
В состав Nitro входит вспомогательный код, позволяющий использовать многочисленные библиотеки JavaScript, которые поддерживают различные формы DHTML и Ajax. Для облегчения интеграции в Nitro применяется высокоуровневый синтаксис. Например, в дистрибутиве Nitro есть пример поиска по сайту Flickr и вывода уменьшенных изображений. Текстовое поле для ввода тегов поиска поддерживает технологию Ajax, что достигается следующей разметкой:
<input type="text" name="tags" auto_complete="true" />
Контроллер реализует метод tags_auto_complete
, который возвращает строку в формате XML, зависящую от содержимого поля.
Nitro позволяет кэшировать действия (то есть отрисованные страницы целиком), результаты вызова методов и сгенерированные фрагменты текста. Например, чтобы поместить в кэш результат отрисовки страницы index, контроллер должен вызвать следующий метод:
cache_output :index
Кэширование можно добавить и в сегменты кода:
<?r cache(:book_list_cache_key) do ?>
<ul>
<li each="book in Books.all">#{book.title}</li>
</ul>
<?r end ?>
В Nitro встроен класс преобразования для локализации, позволяющий автоматически подставлять в шаблон то или иное содержимое. Он не является стандартным этапом конвейерной компиляции, вы сами должны добавить его в файл run.rb
:
require 'nitro/compiler/localization'
include Nitro
Compiler.transformation_pipeline = [
StaticInclude,
Elements,
Morphing,
Markup,
Localization,
Cleanup
]
Отметим, что конвейер можно переконфигурировать, выбросив стандартные преобразования и добавив собственные. Далее определяются локали:
Localization.locales = {
:en => 'conf/locales/en.yml',
:de => 'conf/locales/de.yml'
}
Локаль — это просто YAML-файл, сопоставляющий одним строкам другие:
---
:author: Autor
:language: Sprache
:book_rank: Buchrank
В шаблонах применяются специальные конструкции для обозначения подставляемого текста:
<div>[[:author]]: #{@book.author}</div>
<div>[[:language]]: #{@book.language}</div>
<div>[[:book_rank]]: #{@book.rank}</div>
Выбор файла локали определяется значением session[:LOCALE]
. В методах контроллера можно получить текущую локаль с помощью специальной переменной @lc
.
@language = @lc[:language]
Если зависимости от языка более обширны, то можно организовать несколько каталогов шаблонов, по одному для каждого языка. Какой из них использовать, определяется значением установленной локали.
Дополнительную информацию о Nitro можно найти на следующих ресурсах:
• http://www.nitroproject.org/ (домашняя страница Nitro)
• http://rubyforge.org/forum/forum.php?forum_id=5921 (страница проекта Nitro на сайте Ruby Forge);
• http://oxyliquit.de/ (справочное и учебное руководство по Nitro).
- Технические детали
- Второй просмотр: детали
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- Вводящие в заблуждение заявления и прочие стратегии использования посланий
- 12.4.5. Прочие виджеты
- Детализирующие вопросы
- Окончательная детализация плана перехода на новую систему и поддержка ее работы
- Регламентированные и прочие отчеты
- Детали
- Прочие операторы
- Прочие функции
- Глава 9 Принтеры и прочие периферийные устройства