如何在异步加载清单文件后加载页面javascript

Abr*_*ram 10 javascript asynchronous ruby-on-rails

我试图将我的应用程序转换为异步javascript加载:

<%= javascript_include_tag "application", async: true %>
Run Code Online (Sandbox Code Playgroud)

问题是在异步加载Jquery之前,正在运行任何特定于页面的脚本.在加载application.js清单文件之前,如何推迟这些操作.

我尝试包装我的页面js $(window).load(function(){});但这没有帮助.我仍然看到以下错误:

Uncaught ReferenceError: $ is not defined
Run Code Online (Sandbox Code Playgroud)

更新:

这似乎对我有用,但我希望有人确认这是正确的方法:

<%= javascript_include_tag "application", async: true, onload: 'pageScripts()' %>
Run Code Online (Sandbox Code Playgroud)

然后页面脚本如:

<script>
  function pageScripts() {
    // do something
  }
</script>
Run Code Online (Sandbox Code Playgroud)

Sso*_*esS 13

你的方法是正确的,但我建议限制你的Async仅用于生产,因为在开发中Sprockets还没有连接所有文件.

<%= javascript_include_tag "application", async: Rails.env.production?, onload: 'pageScripts()' %>
Run Code Online (Sandbox Code Playgroud)

  • @KickButtowski 的区别在于,当 `:async =&gt; true` 时,它总是异步的,但是当 `async: Rails.env.production?` 时,它只会在生产时异步 (3认同)
  • 谢谢,既然你费了心思回复,我会给你支票。顺便说一句,您可以通过将其放入 development.rb `config.assets.debug = false` 来在开发中进行测试。这会强制清单文件处于开发模式,但通常执行 `async: Rails.env 是一个更好的主意。生产?`正如你所建议的。谢谢。 (2认同)