質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

951閲覧

rails5 turbolinks 画面遷移時jsが読み込まれない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/11/08 02:59

いつもお世話になっております。

画面遷移時jsが読み込まれないことを下記の実装で回避しました。
しかし、これがrailsらしい書き方なのかわかりません
現在の実装がrailsらしい実装の仕方なのか
turbolinksの恩恵を受けているのか、教えていただけませんでしょうか。
よろしくお願いいたします。

現在の実装

  • jsを二つに分け、片方をヘッダーで読み込み、片方をbodyの最後で読み込む。

  • 該当ページ以外でもjsが読み込まれてしまう。

  • application.js

lang

1//= require rails-ujs
  • app.js

lang

1//= require jquery/jquery.slim.min 2//= require bootstrap/bootstrap.min 3//= require user //自分で書いたjs 4//= require turbolinks
  • user.js

lang

1console.log("hoge"); 2
  • application.html.slim

lang

1doctype html 2html lang="ja" 3 head 4 meta charset="utf-8" / 5 title 6 | sample 7 = csrf_meta_tags 8 = stylesheet_link_tag 'application' 9 = javascript_include_tag 'application' 10 body 11 = yield 12 = javascript_include_tag 'app' 13

過程

1. jsをヘッダーで読み込み、'turbolinks:load'を付与

  • 画面遷移をするとjsが読み込まれない

  • application.js

lang

1//= require rails-ujs 2//= require jquery/jquery.slim.min 3//= require bootstrap/bootstrap.min 4//= require user //自分で書いたjs 5//= require turbolinks
  • user.js

lang

1document.addEventListener("turbolinks:load", function() { 2 console.log("hoge"); 3})
  • application.html.slim

application.html.slim

1doctype html 2html lang="ja" 3 head 4 meta charset="utf-8" / 5 title 6 | sample 7 = csrf_meta_tags 8 = stylesheet_link_tag 'application' 9 = javascript_include_tag 'application' 10 body 11 = yield

2. jsの読み込み位置をbodyの最後に持ってくる

  • 画面遷移してもjsを読み込んでくれる
  • Uncaught Error: rails-ujs has already been loaded!が発生

application.html.slim

1 body 2 = yield 3 = javascript_include_tag 'application' 4

3. rails-ujs has already been loaded!を解消

  • jsの読み込み位置はbodyの最後
  • ページ遷移するとjsが読み込まれない問題が再発
= javascript_include_tag 'application', 'data-turbolinks-eval': false
  • 参考url

https://stackoverflow.com/questions/20684846/turbolinks-causing-a-jquery-ujs-has-already-been-loaded-error

4. jsを使うページへのlink_todata: {turbolinks: false}を付与

  • jsの読み込み位置はbodyの最後
  • 画面遷移時jsを読み込んでくれる
  • 設定していないページにはrails-ujs has already been loaded!が発生している

5. ライブラリをヘッダー、自前のをbodyで読み込む

  • jqueryが動かない

  • application.js

lang

1//= require rails-ujs 2//= require jquery/jquery.slim.min 3//= require bootstrap/bootstrap.min 4//= require turbolinks
  • app.js

lang

1//= require user //自分で書いたjs

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

turbolinksの恩恵を受ける

turbolinksをヘッダーで読み込む必要がある。
javascriptはapplication.jsにまとめ
= javascript_include_tag 'application'
をヘッダーで読み込む

リロードしないとjsが読み込まれない

$(document).on 'turbolinks:load', ->

内にjsを記述し、下記を実施

  • 適切な発火条件を設ける
  • undefinedエラーを削除
  • Holder.run()を追記

投稿2017/11/08 03:47

編集2017/11/08 09:21
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問