将js文件添加到Rails3

时间:2012-12-04 16:35:20

标签: jquery ruby-on-rails ruby ruby-on-rails-3

即使经过Rails Asset Pipeline tutorial,我也有点困惑。我正在尝试添加最新的jquery文件。我是通过布局javascript_include_tag还是通过application.js?

执行此操作

如果是,那么有什么区别?如果我在application.js中使用//= require jquery,我将如何指定实际的内部版本号

<%= javascript_include_tag "http://ajax.googleapis.com/ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js",
 "jquery.rails.js", 
 "application.js" 
 %>

上面的方法是使用上面的行添加jquery两次,然后通过application.js

//= require jquery 

应用程序是否需要从已安装的gem获取js文件。在我的Gemfile中,我有一行

gem 'jquery-rails'

所以我的主要问题是我应该从哪里加载我的特定jquery版本。

2 个答案:

答案 0 :(得分:2)

jquery-rails包含特定版本的jquery(哪个版本将取决于gem的版本),这就是使用//= require jquery时所包含的内容。如果您这样做,则包含javascript_include_tag的jquery。

如果您想使用与jquery-rails gem中包含的版本不同的版本,请将其设置为javascript_include_tag,并省略//= require jquery指令。< / p>

为了进一步解释,资源管道使用//= require语法在加载application.js时加载(以及在预编译时,也合并到)特定文件。其中的主要好处之一是单个资源文件的缓存和交付速度更快。使用javascript_include_tag单独包含多个脚本是另一种加载脚本的方法,但由于它为每个文件添加了单独的<script>标记,因此它不会获得{{1}提供的好处。语法。

然而,对于CDN服务的脚本,损失的利益主要是弥补的。这是因为它们可能已经被客户端缓存,服务非常快,并且保证将来不会被修改。

答案 1 :(得分:0)

的application.js

文件在生产中的一个文件中提供(压缩和编译),意思是:

//= require my_file

你得到:

<script ... src="/assets/application.js" ...>

在application.js中包含my_file,并进行压缩。这是默认的生产配置:

config.assets.compress = true # just to compress
config.assets.compile = false # false to use precompiled assets, you precompile with rake assets:precompile
                              # true to allow compilation in production

注意:预编译是将scss和coffee文件转换为css和javascript并将它们保存在公共目录下,以便在请求这些文件时不要点击Rails后端。

javascript_include_tag

javascript_include_tag 'application', 'my_second_file'

你得到:

<script ... src="/assets/application.js" ... >
<script ... src="/assets/my_second_file.js" ... >

如果您离开my_first_file,您将在application.js中嵌入//= require my_first_file

放在哪里

在生产中,你不会进行调试,不是吗?将它们放在application.js中是好的。