2010-02-23 49 views
3

示例:Rails global content_for

我有2個partial _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: 這意味着谷歌圖書館將包括兩次。我怎樣才能處理這個問題,所以圖書館總是隻裝載一次? A在想着可能是希勒?

問題2: 是否有可能擁有一個全局content_for字段,其中每個部分都將其內容附加到其中? Thx。在您的應用程序視圖

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

然後:

回答

4

您可以在視圖中添加inject_js方法到您的應用助手使用

%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圖書館只會加載一次。代碼取自tog's tog_core。還有其他的方法(inject_css等)。