Javascript,Rails视图,content_for和DRYness

时间:2011-05-10 14:31:05

标签: javascript ruby-on-rails layout dry

在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 %>

3 个答案:

答案 0 :(得分:7)

我同意这是您的用例最具体的内容。通常,当我使用&lt;%yield:javascript%&gt;时,它的目的是添加页面特定的库,这将限制您提出的方法。如果你想同时支持两者,我已经完成了以下工作:

(布局)

<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库来优化页面加载,因此您可以在布局中移动它。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

在HAML中,这看起来像:

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