2012-12-04 38 views
1

即使经过Rails Asset Pipeline tutorial,我仍然有点困惑。我试图添加最新的jquery文件。我是通过布局javascript_include_tag还是通过application.js来做到这一点?将js文件添加到Rails3中

如果是这样的区别是什么,我会怎样,如果我用//= require jquery中的application.js

<%= 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

jquery-rails包含特定版本的jquery(哪个版本取决于gem的版本),这就是使用//= require jquery时包含的内容。如果你这样做,你应该不是包括jQuery与javascript_include_tag

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

为了进一步说明,资产管道使用//= require语法来加载application.js时加载(以及预编译时,也合并到)特定文件。其中最主要的好处是为单个资源文件提供更快速的缓存和交付。包括使用javascript_include_tag分别使用的几个脚本是加载脚本的另一种方式,但由于它为每个文件添加了单独的<script>标记,因此它没有得到//= require语法提供的好处。

但是,对于CDN提供的脚本,丢失的好处大多可以弥补。这是因为它们很可能已经被客户端缓存,服务速度非常快,并且保证将来不会被修改。

0

的application.js

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

//= require my_file 

你得到:含my_file中的application.js

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

并压缩。这是一个默认的产品配置:

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和咖啡文件转换为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