2012-12-04 39 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