web-dev-qa-db-ja.com

「jquery-ujsはすでにロードされています!」を引き起こすターボリンクエラー

私は新しいRails 4アプリにnoカスタムJavascript-フォルダー_app/assets/javascripts_、_lib/assets/javascripts_および_vendor/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からターボリンクを削除すると、エラーが発生しなくなります...ターボリンクが原因のようです。

これはターボリンクのバグですか、それとも何か問題がありますか?

これが私の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の順序を変更しても、効果がないようです。

23
GMA

最も可能性の高い説明は、ページbodyscriptsを含めていることです。

詳しくはこの問題を参照してください: https://github.com/Rails/turbolinks/issues/14

turbolinks readme から:

経験則として、ターボリンクに切り替えるときは、すべての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>
55
Puhlze

私は同じ問題に直面し、いくつかのヒットとトライアルを行った後、JavaScriptファイルのシーケンスが重要であることがわかりました。

動作シーケンスは

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

このソリューションが誰かを助けることを願っています。

6
lokeshjain2008

私にとっては、これらを2回書き込んだので、2回ロードされていました。 application.jsに入ったら//= require jqueryおよびapplication.html.erbにスクリプトタグとして1回。

2
Fatima Haidar

私が抱えていた問題は、ヘッドとボディに<%= render 'layouts/head'%>を2回コピーしたことです。 laouts/application.html.erbファイルを確認してください

0
Carlos