示例:
我有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"}
...
在我的布局中,我将javascripts包含在
中= yield(:map)
= yield(:bigmap)
问题1: 这意味着谷歌图书馆将被包括两次。我怎么能处理这个,所以库总是只加载一次? A想到看见heler可能吗?
问题2: 是否可以拥有一个全局content_for字段,其中每个部分都将其内容附加到其中? THX。
答案 0 :(得分:4)
您可以在应用程序助手中添加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
代码。还有其他方法(inject_css等)。