Rails глобальный контент_for - PullRequest
3 голосов
/ 23 февраля 2010

Пример:

У меня есть 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, где каждый частичный элемент добавляет к нему свой контент? Thx.

1 Ответ

4 голосов
/ 23 февраля 2010

Вы можете добавить метод 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 и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...