Ruby on rails:资产管道中的javascript

Ed_*_*Ed_ 1 javascript ruby-on-rails asset-pipeline

我是一个完整的菜鸟,我试图了解如何在Rails中使用javascript和资产管道.例如,我在哪里放一个简单的$(document).ready来在特定视图中执行.我已经完成了将代码放在视图中,但我认为这不是最好的方法.补充阅读也将不胜感激,谢谢.

Nic*_*nto 6

创建一个名为whatever_you_want.jsI 的新文件,通常根据视图或模型拆分它们.它最终并不重要,因为资产管道将它全部归结为一个大文件.拆分文件符合您的偏好和喜好.

所以,whatever.js你可以编写你想要的任何JS代码$(document).ready,没有..资产管道并不真正关心..如果你编写的代码需要$(document).ready,请使用它.如果没有,不要......

一旦你完成了你的JS,Rails默认会把你在application.js清单文件中告诉它的所有js文件放到一个文件中,按你写的顺序

所以它看起来像

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

所以它首先加载jquery,然后是jquery ujs,然后是bootstrap,然后是tree,这是application.js所在的当前目录

同样你只能这样做

//= require whatever.js
Run Code Online (Sandbox Code Playgroud)

在开发时,默认情况下,您不会看到一个大文件,而是所有文件,因为它更容易以这种方式调试.

一旦部署到生产环境,根据您的需要,您可以通过资产管道预编译所有资产,rake assets:precompile或者您可能有一个脚本可以在部署时自动预编译,如asset_syncgem

基本上,你应该把自链轮在查看文件js文件和HTML代码的js代码不处理JS是不是资产的文件/文件进行预编译(即压缩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.jswhatever.html.erb

whatever.html.erb你可以写

<% content_for :head do %>
  <%= javascript_include_tag "whatever.js" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后,在你的布局文件中(某个文件里面有<%= yield%>,转到html的头部然后写

<%= yield :head %>
Run Code Online (Sandbox Code Playgroud)

名称头基本上是你想要的.

这告诉Rails像"Hey man, this whatever.js file is for you.. just put it in the :head ok?"和Rails一样"You got it mister!"

这样,您可以在任何视图中包含所需的任何js文件.

但是,既然你说你是一个完整的noob,我会建议保持简单,并且包括在第一次去的所有js文件,只是使用唯一的类和ID为您的HTML元素,你应该罚款.最有可能的是,有些人可能不同意这一点.但既然你说你是一个完整的菜鸟,那说出来或者他们说的并不重要.无论你更容易理解的是什么.所以试试吧