1

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

4

3 回答 3

6

创建一个名为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_syncgem

基本上,您应该将 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.jsinwhatever.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,你应该没问题。很可能,有些人可能不同意这一点。但既然你说你是个十足的菜鸟,我说什么或他们说什么并不重要。你更容易理解的是。所以尝试一下

于 2013-04-08T06:11:52.977 回答
1

这是有关该主题的好读物:http ://railsapps.github.io/rails-javascript-include-external.html

于 2013-04-08T12:13:11.460 回答
0

所有的 JavaScript 都应该在 app/assets/javascript

您也可以为特定视图创建一个单独的 js 文件,或者您可以在 application.js 文件中编写您的 js 代码

将此代码放入布局 <%= javascript_include_tag "application" %>

最后运行 rake assets:precompile

于 2013-04-08T06:11:28.237 回答