【问题标题】:Turbolinks causing a "jquery-ujs has already been loaded!" errorTurbolinks 导致“jquery-ujs 已加载!”错误
【发布时间】:2014-01-08 04:58:42
【问题描述】:

我有一个新的 Rails 4 应用程序,其中包含 no 自定义 Javascript - 文件夹 app/assets/javascriptslib/assets/javascriptsvendor/assets/javascripts 都是空的(除了 app/assets/javascripts/application.js)。

当我在应用程序周围单击时,我不断在 JS 控制台中收到错误 jquery-ujs has already been loaded!。每次我点击“后退”按钮时都会发生这种情况,有时当我点击正常链接时会发生这种情况(尽管我无法始终如一地发生这种情况。)

application.js:

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require turbolinks
//= require_tree .

当我从 application.js 中删除 turbolinks 时,我不再收到错误消息......所以 turbolinks 似乎是罪魁祸首。

这是 turbolinks 的错误,还是我做错了什么?

这是我的 Gemfile:

source 'https://rubygems.org'

ruby '2.0.0'

gem 'rails', '4.0.0'

gem 'active_model_serializers'
gem 'aws-sdk'
gem 'bootstrap-sass-rails'
gem 'coffee-script-source', '1.5.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'devise'
gem 'factory_girl_rails', '4.1.0'
gem 'figaro'
gem 'font-awesome-sass-rails'
gem 'jbuilder', '~> 1.2'
gem 'jquery-rails'
gem 'paperclip'
gem 'paperclip-meta', github: 'y8/paperclip-meta'
gem 'pg'
gem 'sass-rails', '~> 4.0.0'
gem 'turbolinks'
gem 'uglifier', '>= 1.3.0'

group :production do
  gem 'rails_12factor'
end

group :doc do
  gem 'sdoc', require: false
end

group :test do
  gem 'capybara', '2.1.0'
end

group :development, :test do
  gem 'childprocess', '0.3.9'
  gem 'debugger'
  gem 'faker', '~> 1.2.0'
  gem 'json_spec'
  gem 'rspec-rails'
  gem 'rspec-mocks'
end

group :development do
  gem 'annotate'
  gem 'hirb'
  gem 'wirb'
end

在 application.js 中更改 requires 的顺序似乎也无济于事。

【问题讨论】:

    标签: javascript jquery ruby-on-rails turbolinks


    【解决方案1】:

    最可能的解释是您在页面body 中包含了您的脚本

    请参阅此问题了解更多信息:https://github.com/rails/turbolinks/issues/143

    来自turbolinks readme

    根据经验,在切换到 Turbolinks 时,将所有 javascript 标记移到 head 内,然后向后工作,只有在绝对必要时才将 javascript 代码移回正文。如果您不想在正文中重新评估任何脚本标签,则可以将data-turbolinks-eval 属性设置为false

    <script type="text/javascript" data-turbolinks-eval=false>
      console.log("I'm only run once on the initial page load");
    </script>
    

    【讨论】:

    • 知道了!我在关闭&lt;/body&gt; 标签之前有我的&lt;%= javascript_include_tag ... %&gt; - 将它移动到&lt;head&gt; 内解决了这个问题。谢谢!
    • 我碰巧在布局正文中有 javascript 标记。这真的把我搞砸了。
    • 我知道这个问题很久以前就得到了回答,但我想与我的案例合作......我遇到了这样的问题,但是在生产中,在 CoffeeScript 文件中推送了一些更新之后。问题很简单:缓存。可能该页面试图加载旧的和新的捆绑脚本文件。对于我的浏览器,通过按 Ctrl+F5 忽略缓存资源已解决。
    【解决方案2】:

    我遇到了同样的问题,经过一些尝试和试验后,我发现 javascript 文件的顺序很重要。

    工作顺序是

    //= require jquery
    //= require jquery_ujs
    //= require jquery.turbolinks
    //= require turbolinks
    

    希望这个解决方案能帮助到某人。

    【讨论】:

      【解决方案3】:

      对我来说,我已经把这些写了两次,所以它加载了两次。一次在 application.js //= require jquery 和一次在 application.html.erb 作为脚本标签。

      【讨论】:

      • 你的意思是两行都写在两个不同的地方?
      • 这有时与添加 webpack 并拥有单独的前端有关,例如 Vue.js 或 React
      【解决方案4】:

      我遇到的问题是我将 复制了两次!在头部和主体中。检查 laouts/application.html.erb 文件

      【讨论】:

        猜你喜欢
        • 2014-01-12
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 2018-10-14
        • 2018-08-28
        • 1970-01-01
        • 2017-01-03
        相关资源
        最近更新 更多