3

例子:

我有 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 可能是在考虑 View Heler 吗?

问题 2:是否可以有一个全局 content_for 字段,其中每个部分都将其内容附加到它上面?谢谢。

4

1 回答 1

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_jsuses @javascripts.uniq,所以 Google 库只会被加载一次。

inject_js取自tog 的 tog_core 的代码。还有其他方法(inject_css 等)。

于 2010-02-23T17:49:28.437 回答