我是一个完整的菜鸟,我正在尝试了解如何在 Rails 中使用 javascript 和资产管道。例如,我在哪里放置一个简单的 $(document).ready 以在特定视图中执行。我已经将代码放在视图本身中,但我认为这不是最好的方法。补充阅读也将不胜感激,谢谢。
3 回答
创建一个名为whatever_you_want.js
我通常根据视图或模型拆分这些的新文件。最终这并不重要,因为资产管道将其全部分解为一个大文件。拆分成文件是根据您的喜好和喜好。
所以,whatever.js
你可以写任何你想要的 JS 代码,有$(document).ready
,没有..资产管道并不真正关心..如果你写的代码需要$(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
基本上,您应该将 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 .
in application.js
,所以它不包括所有 js 文件,你必须有whatever.js
inwhatever.html.erb
在whatever.html.erb
你可以写
<% content_for :head do %>
<%= javascript_include_tag "whatever.js" %>
<% end %>
然后,在您的布局文件中(其中有 <%= yield %> 某处的文件,转到 html 的头部并写入
<%= yield :head %>
名字头基本上是你想要的。
这告诉 Rails 类似"Hey man, this whatever.js file is for you.. just put it in the :head ok?"
And Rails 就像"You got it mister!"
这样你就可以在你想要的任何视图中包含你想要的任何 js 文件。
但是既然你说你是一个完整的菜鸟,我建议保持简单,并在第一次包含所有 js 文件,只需为你的 html 元素使用唯一的类和 ID,你应该没问题。很可能,有些人可能不同意这一点。但既然你说你是个十足的菜鸟,我说什么或他们说什么并不重要。你更容易理解的是。所以尝试一下
所有的 JavaScript 都应该在 app/assets/javascript
您也可以为特定视图创建一个单独的 js 文件,或者您可以在 application.js 文件中编写您的 js 代码
将此代码放入布局 <%= javascript_include_tag "application" %>
最后运行 rake assets:precompile