2016-03-07 64 views
8

我想我的應用程序轉換爲異步JavaScript加載與後:如何加載頁面的JavaScript我的清單文件的異步加載

<%= javascript_include_tag "application", async: true %> 

的問題是,任何特定頁面的腳本正在jQuery的之前運行異步加載。我如何推遲這些,直到application.js清單文件已被加載。

我試圖在$(window).load(function(){});包裝我的頁面js,但這沒有幫助。我仍然看到了以下錯誤:

Uncaught ReferenceError: $ is not defined 

更新

這似乎是爲我工作,但我想有人來確認它是正確的做法:

<%= javascript_include_tag "application", async: true, onload: 'pageScripts()' %> 

然後在網頁腳本,如:

<script> 
    function pageScripts() { 
    // do something 
    } 
</script> 
+0

爲什麼不簡單地寫你的javascript在'window.onload'範圍內? – jayant

回答

10

你方法是正確的但是我會建議限制你的異步僅用於生產,因爲在開發中Sprockets還沒有將所有文件串聯起來。

<%= javascript_include_tag "application", async: Rails.env.production?, onload: 'pageScripts()' %> 
+1

謝謝,我會給你檢查,因爲你打擾了迴應。順便說一句,你可以在development.rb'config.assets.debug = false'中進行測試,這會強制清單文件處於dev模式,但通常最好做'async:Rails.env。按照你的建議生產?謝謝。 – Abram

+0

有什麼區別:async => true和async:Rails.env.production? ? –

+1

@KickButtowski不同之處在於,當':async => true'時,它總是Async,但是當'async:Rails.env.production?'時它只會在生產時異步 – SsouLlesS