Rails глобальный контент_for
Пример:
У меня есть 2 частичных _map.haml и _bigmap.haml.
:: _map.haml
- content_for :map do
%script{:type => "text/javascript", :src => "http://maps.google.com/maps/api/js?sensor=true"}
...
:: _bigmap.haml
- content_for :bigmap do
%script{:type => "text/javascript", :src => "http://maps.google.com/maps/api/js?sensor=true"}
...
В моем макете я включаю JavaScript в
= yield(:map)
= yield(:bigmap)
ВОПРОС 1: Это означает, что библиотека Google будет включена дважды. Как я могу справиться с этим, чтобы библиотека всегда загружалась только один раз? А думал о Хелере?
ВОПРОС 2: Возможно ли иметь глобальное поле content_for, где каждый частичный элемент добавляет к нему свой контент? Спасибо.
1 ответ
Вы можете добавить inject_js
Метод в вашем приложении помощник для использования в представлениях:
def inject_js
@javascripts.uniq.collect{ |js|
javascript_include_tag js
}.join("\n")
end
Затем в представлении вашего приложения:
%html
%head
...
= inject_js
и в любом представлении, которое использует bigmap:
- @javascripts << 'http://maps.google.com/maps/api/js?sensor=true'
- @javascripts << 'bigmap'
или обычная карта:
- @javascripts << 'http://maps.google.com/maps/api/js?sensor=true'
- @javascripts << 'bigmap'
Так как inject_js
использования @javascripts.uniq
, библиотека Google будет загружена только один раз.
inject_js
код взят из tog_core тог. Там есть и другие методы (inject_css и т. Д.).