我更喜欢让布局的产量看起来像这样:
<html>
<!-- other stuff -->
<body>
<!-- other stuff -->
<%= yield :javascript %>
</body>
</html>
然后在一个视图中你可以写:
<% content_for :javascript do %>
<script type='text/javascript'>
function doMagic() {
//Mind-blowing awesome code here
}
</script>
<% end %>
<!-- More view Code -->
<%= render :partial => "sub_view_with_javascript" %>
在部分 _sub_view_with_javascript.html.erb 中,您还可以编写:
<% content_for :javascript do %>
<script type='text/javascript'>
function DoMoreMaths() {
return 3+3;
}
</script>
<% end %>
我对这种方法的推理是 yield 和 content_for 在不同的文件中。为每个 content_for 放入 script 标签并不是 DRY,但它允许语法高亮显示每个文件中的语言变化并在那里帮助我。
如果您在单个文件中有多个 content_for 调用同一个符号(在我们的例子中是 :javascript),我会考虑将它们全部合并到顶部,但它非常适合与部分一起使用。
HTML 非常乐意拥有任意数量的脚本块。唯一可能的问题是,在使用 firebug 等开发人员工具中的代码时,需要花费更多时间来为您的函数找到正确的脚本块。这只发生在我需要设置 javascript 断点进行调试时。