【问题标题】:Javascript Include Tag Best Practice in a Rails ApplicationJavascript 在 Rails 应用程序中包含标签最佳实践
【发布时间】:2010-09-28 06:10:44
【问题描述】:

假设我需要在 ERb 模板的 <head> 中调用一个 javascript 文件。 我的直觉是照常行事:

<head>
<%= javascript_include_tag :defaults %> <!-- For example -->
</head>

在我的应用程序布局中。问题当然是这些 javascript 文件被加载到我的应用程序的每个页面中,而不管正在查看的页面是否需要它们。

所以我想知道是否有一种很好的方法可以将 javascript 加载到例如仅在特定目录中找到的所有 ERb 模板的标头中。

【问题讨论】:

    标签: javascript ruby-on-rails header rjs


    【解决方案1】:

    我通常在布局文件中有以下内容:

    <head>
      <%= javascript_include_tag :defaults %> <!-- For example -->
      <%= @extra_head_content %>
    </head>
    

    然后在视图中:

    <% (@extra_head_content ||= "") += capture do %>
      <%= other_content %>
    <% end %>
    

    请参阅#capture 的 API 文档

    【讨论】:

      【解决方案2】:

      我会使用content_for

      例如,指定将其插入应用程序布局的位置:

      <head>
      <title>Merry Christmas!</title>
      <%= yield(:head) -%>
      </head>
      

      然后从视图发送到那里:

      <%- content_for(:head) do -%>
      <%= javascript_include_tag :defaults -%>
      <%- end -%>
      

      【讨论】:

      • 为什么是
      • 在旧版本的 Rails 中,“
      • 这个答案有帮助,但我更喜欢只有一行的更短的实现:&lt;% content_for(:head) { javascript_include_tag :this_file, :that_file, :more_files } %&gt;
      • @MaffooClock:如果你想要更短,你可以删除大括号,然后执行 。看?保存了两个字符! ;-)
      【解决方案3】:

      我觉得包括所有的默认值都没有错,因为它们可以缓存在用户的浏览器上。

      【讨论】:

      • 如果您的包含仅适用于网站的管理部分,该怎么办?
      【解决方案4】:

      我建议不要在标题中添加 javascript,因为它会导致页面加载速度变慢。而是在页面底部加载js,这样更快。 http://developer.yahoo.com/performance/rules.html#js_bottom

      <body>
       ....
        <%= yield(:js) -%>
      </body>
      

      然后从视图发送到那里:

      <%- content_for(:js) do -%>
        <%= javascript_include_tag :defaults -%>
      <%- end -%>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-14
        • 2012-04-27
        • 2013-06-03
        • 1970-01-01
        • 2017-03-10
        • 2011-05-17
        相关资源
        最近更新 更多