2010-02-23 4 views
3

Exemple:Rails contenu global_for

J'ai 2 _map.haml partielle et _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"} 
    ... 

Dans ma mise en page j'inclure javascripts dans

= yield(:map) 
= yield(:bigmap) 

QUESTION 1: Cela signifie bibliothèque Google sera inclus deux fois. Comment puis-je gérer cela afin que la bibliothèque soit toujours chargée une seule fois? A pensait à voir heler peut-être?

QUESTION 2: Est-il possible d'avoir un champ content_for global où chaque partie ajoute son contenu? Thx.

Répondre

4

Vous pouvez ajouter une méthode inject_js dans votre aide de l'application pour une utilisation dans les vues:

def inject_js 
    @javascripts.uniq.collect{ |js| 
    javascript_include_tag js 
    }.join("\n") 
end 

ensuite dans votre vue de l'application:

%html 
    %head 
    ... 
    = inject_js 

et dans une vue qui utilise bigmap:

- @javascripts << 'http://maps.google.com/maps/api/js?sensor=true' 
- @javascripts << 'bigmap' 

ou une carte ordinaire:

- @javascripts << 'http://maps.google.com/maps/api/js?sensor=true' 
- @javascripts << 'bigmap' 

Parce que inject_js utilise @javascripts.uniq, la bibliothèque Google ne sera chargée qu'une seule fois.

inject_js code pris de tog's tog_core. Il y a aussi d'autres méthodes (injection_css, etc).

Questions connexes