似乎rails 3的方式是将所有javascript全局包含到应用程序中。我对此是否正确?
是什么原因?
如果我不正确,包含特定于页面的javascript的标准方法是什么?
谢谢!
答案 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>
编辑
一些有用的链接
答案 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 ):
//= require application
这些将取决于 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%>
以上内容适用于您的特定视图文件。