通过content_for在Rails中包含javascript的最佳方式

时间:2013-02-26 21:44:06

标签: ruby-on-rails ruby refactoring

我的Rails应用程序中有一些页面需要包含一些javascript,最好是在</body>标记之前。没有必要在每个页面上都包含此JavaScript,因为大多数都不使用它。我找到了一种方法来完成这项工作,但我认为代码很糟糕。

你会如何做同样的事情,或者你将如何重构现有的代码?

在gist.github.com上查看简化的示例代码: https://gist.github.com/scottswezey/ffc7bf52041b976b710a

(或者参见下面的相同代码:)

application.html.erb(布局):

<!DOCTYPE html>
<html lang="en">
  <head>
  ...
  </head>

  <body>
    ...
    <script>
    $(function() {
      <%= yield(:js) %>
    });
  </script>
</body>
</html>

some_view_file.html.erb(查看):

<%
str = <<END_OF_STRING
$('.modal').modal()
END_OF_STRING

content_for :js do
  str.html_safe
end
%>

2 个答案:

答案 0 :(得分:0)

不要这样做:JavaScript不属于HTML。只需在页面中放置一个适当的<script>标记,引用外部JS文件,如下所示:

application.html.haml

!!!
%html
  %head
    = yield :javascript
  %body
    = yield

查看文件

- content_for :javascript do
  = javascript_include_tag 'modal'

应用程序/资产/ modal.js

$(document).ready(function() {
  $('.modal').modal();
}

这使得一切都很好地分开。

答案 1 :(得分:-1)

是否可以在JS中添加.js.erb部分并将其渲染到正文下?

编辑:看看这个答案:https://stackoverflow.com/a/10113547/1283742