繁体   English   中英

Ruby on Rails:资产管道中的JavaScript

[英]Ruby on rails: javascript in asset pipeline

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

创建一个名为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,然后引导,然后再加载tree,这是application.js所在的当前目录

同样,你只能做

//= require whatever.js

在开发中,默认情况下,您不会看到一个大文件,但是会看到所有文件,因为这样更容易调试。

部署到生产环境后,根据需要,可以使用rake assets:precompile通过资产管道对所有资产进行rake assets:precompile或者您可以拥有一个可以在部署时自动进行预编译的脚本,例如asset_sync gem

基本上,您应该将js代码放在js文件中,并将html代码放在视图文件中,因为链轮(压​​缩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 %>

然后,在您的布局文件(一个内部有<%= yield%>的文件中,转到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,就可以了。 很有可能,有些人可能不同意这一点。 但是,由于您说的是完全菜鸟,所以我所说的或他们所说的并不重要。 您更容易理解的是。 所以尝试一下

所有JavaScript都应位于app / assets / javascript中

您也可以为特定视图制作单独的js文件,也可以在application.js文件中编写js代码

将此代码放入布局<%= javascript_include_tag“应用”%>

最后运行rake资产:预编译

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM