2010-02-23 78 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等)。