我是一个完整的菜鸟,我正在尝试了解如何在Rails中使用javascript和资产管道。 例如,我在哪里放一个简单的$(document).ready来在特定视图中执行。我已经完成了将代码放在视图中,但我认为这不是最好的方法。 补充阅读也将不胜感激,谢谢。
答案 0 :(得分:5)
创建一个名为whatever_you_want.js
的新文件我通常根据视图或模型拆分这些文件。它最终并不重要,因为资产管道将它全部归结为一个大文件。拆分文件符合您的偏好和喜好。
所以,在whatever.js
中,您可以使用$(document).ready
编写所需的任何JS代码,而不是..资产管道并不关心..如果您编写的代码需要$(document).ready
, 用它。如果没有,请不要......
一旦你完成了JS,Rails默认会把你在application.js
清单文件中告诉它的所有js文件按照你写的顺序放在一个文件中
所以它看起来像
//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .
所以它首先加载jquery,然后是jquery ujs,然后是bootstrap,然后是tree,它是application.js所在的当前目录
同样你只能做
//= require whatever.js
在开发时,默认情况下,您不会看到一个大文件,而是所有文件,因为它更容易以这种方式调试。
根据您的需要部署到生产环境后,您可以使用rake assets:precompile
通过资产管道预编译所有资产,或者您可以使用可在部署时自动预编译的脚本,如asset_sync
gem < / p>
基本上,你应该把js代码放在js文件和html代码的视图文件中,因为sprockets(压缩js和东西的gem)不处理不在资源文件/文件上预编译的JS
一些补充读物让你高兴
http://guides.rubyonrails.org/asset_pipeline.html
http://railscasts.com/episodes/279-understanding-the-asset-pipeline
http://blog.55minutes.com/2012/02/untangling-the-rails-asset-pipeline-part-3-configuration/
希望能在某种程度上帮助你
在多次阅读你的问题后,我意识到你所问的是“在哪里放置与特定视图相关的js代码”
那么,现在您熟悉资产管道,现在您可以了解如何使用它:
在你的whatever.js
文件中你写下你想写的任何内容..假设你在//=require_tree .
中没有application.js
,所以它不包括所有的js文件,并且您必须whatever.js
whatever.html.erb
在whatever.html.erb
中你可以写
<% content_for :head do %>
<%= javascript_include_tag "whatever.js" %>
<% end %>
然后,在你的布局文件中(某个文件里面有&lt;%= yield%&gt;,转到html的头部然后写
<%= yield :head %>
名称头基本上是你想要的。
这告诉Rails像"Hey man, this whatever.js file is for you.. just put it in the :head ok?"
和Rails就像"You got it mister!"
这样,您可以在任何视图中包含所需的任何js文件。
但是既然你说你是一个完整的菜鸟,我建议保持简单,并在第一次包含所有js文件,只需使用你的html元素的唯一类和ID,你应该没事。最有可能的是,有些人可能不同意这一点。但既然你说你是一个完整的菜鸟,那说出来或者他们说的并不重要。无论你更容易理解的是什么。所以试试吧
答案 1 :(得分:1)
答案 2 :(得分:0)
所有JavaScript都应该在 应用程序/资产/ JavaScript的
您也可以为特定视图创建单独的js文件,或者您可以在application.js文件中编写js代码
将此代码放入布局&lt;%= javascript_include_tag“应用程序”%&gt;
最后跑了 rake资产:预编译