【问题标题】:Javascript, Rails views, content_for and DRYnessJavascript、Rails 视图、content_for 和 DRYness
【发布时间】:2011-08-22 12:57:18
【问题描述】:

在 Rails 中,特定于页面的 Javascript 的常用习语是:

(布局)

<head>
  <% yield :javascript %>
</head>

(查看)

<% content_for :javascript do %>
  <script type="text/javascript">
    $().whatever;
  </script>
<% end %>

我讨厌重复脚本标签。为什么以下是一个坏主意?

(布局)

<head>
  <script type="text/javascript">
    <% yield :javascript %>
  </script>
</head>

(查看)

<% content_for :javascript do %>
    $().whatever;
<% end %>

【问题讨论】:

  • 您可以在&lt;body&gt; 的任何位置放置&lt;script&gt; 标签,它就会执行。您有什么特殊原因要将其放在&lt;head&gt; 中吗?

标签: javascript ruby-on-rails layout dry


【解决方案1】:

我同意这是最适合您的用例的。通常,当我使用 时,其目的是添加特定于页面的库,这将限制您提出的方法。如果你想支持两者,我做了以下:

(布局)

<head>
  <% yield :javascript_libraries %>
  <script type="text/javascript">
    <% yield :javascript %>
  </script>
</head>

(查看)

<% content_for :javascript do %>
    $().whatever;
<% end %>
<% content_for :javascript_library do %>
    <%= javascript_include_tag 'page-specific.js' %>
<% end %>

当然,大多数人将 javascript 库放在底部以优化页面加载,因此您可以将其移动到布局中。

【讨论】:

    【解决方案2】:

    习语很棒,但最重要的是您和您的团队的生产力和维护事物的能力,如果您同意的话,我也认为它没有任何问题。这就是说我以前做过,并且在项目中也看到过,虽然现在我通常把它放在一个脚本文件中,除非我绝对必须把它放在特定的页面中。

    【讨论】:

    • 我同意。我会把它放在一个whatever.js 文件中并且:&lt;% content_for :javascript do -%&gt;&lt;%= javascript_include_tag 'whatever' %&gt;&lt;% end -%&gt;
    • 但是 AIUI 不能从 .html 渲染 .js 视图,对吧?你还得叫它.html.erb?出于某种原因,这真的让我很烦恼。
    【解决方案3】:

    如果你想简化你的视图,我强烈推荐HAML(它是 CSS 的姐妹 SASS)。有一个轻微的学习曲线,您可能不想一次转换所有现有视图,但我怀疑您是否会想回到 ERB 的丑陋混乱。

    在 HAML 中,这看起来像:

    = content_for :head do
      :javascript
        $().whatever;
    

    【讨论】:

      猜你喜欢
      • 2022-08-22
      • 1970-01-01
      • 2013-02-26
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2014-01-30
      相关资源
      最近更新 更多