正确的方法在rails中包含特定页面的javascript

时间:2012-12-13 03:20:45

标签: ruby-on-rails

似乎rails 3的方式是将所有javascript全局包含到应用程序中。我对此是否正确?

是什么原因?

如果我不正确,包含特定于页面的javascript的标准方法是什么?

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用content_for标记将页面特定内容添加到页面的头部。

在你的

中 您的javascript下的

application.html.erb (您的布局文件)包括您添加一行

<%= content_for :js_include %>

然后在任何页面中,您想要包含您刚刚执行的页面特定的javascript

<% content_for :js_include do %>
  <%= javascript_include_tag "some_javascript_file" %>
<% end %>

我不确定你是否必须在javascript_include_tag上包含=符号(只是确保你把它放在application.html.erb文件上,但这几乎就是它的要点。使用content_for标签< / p>

编辑

一些有用的链接

Railscasts Episode Layouts and Content For

Rails API content_for

答案 1 :(得分:1)

默认情况下,Rails 3将包含 application.js ,其中包含//= require_tree,使其依赖于 / app / assets / javascripts 中的所有其他JS文件

您可以删除 application.js 中的//= require_tree application.html.erb 中的<%= javascript_include_tag "application" %>,并添加控制器特定的JS以下内容:

<%= javascript_include_tag params[:controller].split("/")[0])

然后,为包含以下内容的每个控制器创建JS文件( app / assets / javascripts / CONTROLLER-NAME.js ):

  1. //= require application
  2. 您的控制器专用JS
  3. 这些将取决于 application.js ,但也可以拥有自己的JS。

    .split方法允许像Devise这样的控制器在/之前使用它们的名字作为.js文件的名称,这样你只需要创建 devise.js 而不是 devise / sessions.js 和其他人。

答案 2 :(得分:0)

很多方式:

<%= javascript_tag "...javascript..." %>
* Generates <script type="text/javascript">...javascript...</script>

或者

<% content_for :script do %>
   ...javascript...
<% end %>
* This approach includes script into <%= yield :script %> defined in the template anywhere, for example inside the <head> dom:
<head>
  ...
  <% if content_for?(:script) %>
    <%= javascript_tag yield(:script) %>
  <% end %>

</head>

或许多其他方式。

答案 3 :(得分:0)

要仅将特定的javascript文件包含到特定的视图页面中,您需要执行以下步骤。

i) In the assets folder create a separate folder eg. 'separate_view' , and inside put your specific js, and css files.

ii) In the application lay out write like following for 'separate_view'.
  <%= yield :separate_view %>

iii) In your target template write the following for 'separate_view'.
  <% content_for (:separate_view) do %>
    <%= javascript_include_tag "xxx.js" %>
    <%= stylesheet_link_tag "xxx.css" %>
  <%end%>

以上内容适用于您的特定视图文件。