Erb
, где будет доступен нужный хелпер <%= asset_path(path/to/template.html) %>
Мы будем внедрять более красивое решение.
Пусть мы имеем некоторое приложение, где используются шаблоны на стороне клиента. Препроцессор для шаблонов выберем Slim [1]. Не будем заострять внимание на способе организации исходников в проекте. Пусть все наши шаблоны лежат в app/assets/webapp/
. Настроим наше приложение так, чтобы оно подхватывало шаблоны *.html.slim
из нашей директории с шаблонами:
# config/application.rb config.assets.paths << Rails.root.join('app', 'assets', 'webapp') # config/initizlizers/assets_engine.rb Rails.application.assets.register_engine('.slim', Slim::Template) # config/environments/production.rb config.assets.precompile += ['*.html']
Мы создали некий шаблон app/assets/webapp/rubrics/edit.html.slim
и хотим к нему обратиться из JavaScript. Обратиться по адресу /assets/rubrics/edit.html
мы не можем, так как в production-окружении такого файла не будет, а будет нечто /assets/rubrics/edit-5eb3bb250d5300736006c8944e436e3f.html
. Таблица соответствия между логическим путём rubrics/edit.html
и полным лежит в файле-манифесте, который генерируется автоматически. Но использовать его не всегда оправдано, он как минимум содержит много лишних данных.
Gem js_assets
решает задачу составления таблицы соответствия для файлов, подпадающих под определённую маску.
После установки гема подключим JavaScript-хелпер:
// app/assets/javascripts/application.js //= require app_assets
Таблица соответствия будет храниться в переменной window.project_assets
. Метод хелпер asset_path
принимает в качестве аргумента логический путь до необходимого файла и возвращает относительный от корня путь с учётом окружения.
var path = asset_path('rubrics/edit.html') // the function will return for development: // /assets/rubrics/edit.html // and for production // /assets/rubrics/edit-5eb3bb250d5300736006c8944e436e3f.html
Управление списком доступных файлов (с учётом обработки asset pipeline) для хелпера осуществляется через фильтры. Их значения по умолчанию:
JsAssets::List.exclude = ["application.js"] JsAssets::List.allow = ["*.html"]
Расширить их можно например с помощью initializers
.
Исходный код gem можно найти на github.
ссылка на оригинал статьи http://habrahabr.ru/post/194968/
Добавить комментарий