🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 6

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

Ruby on Rails

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

Q&A

解決済

1回答

573閲覧

【turbolinks】この挙動について教えて下さい

pecchan

総合スコア591

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/03/06 02:51

編集2021/03/06 02:54

簡単なプログラムを書いて「turbolinks」について勉強してますが、
java scriptの動作についてどうしても分からない点があります。

rails 6.1.3
ruby 3.0.0
chrome 89.0.4389.72

前提

・ブラウザの「戻る」と「進む」を繰り返す度にturbolinksによって要素が増える際のスクリプトの動作を確認してます。

・スクリプトは<body>内に直接書いてます。

該当のソースコード

リンク元

ruby

1<h3><%= link_to "リンク先へ", tasks_issue1_path %></h3>

リンク先

ruby

1<div id="target"> 2</div> 3 4<script> 5 console.log("script load"); 6 $('#target').append('<b>javascriptから追加しました</b><br>'); 7</script>

ブラウザキャッシュを使った時のconsole.logには1回ずつ出力される

1.一度リンク先に移動(console.logに"script load"が1回出力)
2.ブラウザの「戻る」で戻る
3.ブラウザの「進む」で移動する→要素が増える(console.logに"script load"が1回出力)

ログは合計2回
イメージ説明

対して、リンクを踏んで移動した場合、console.logには2回ずつ出力される

1.一度リンク先に移動(console.logに"script load"が1回出力)
2.ブラウザの「戻る」で戻る
3.リンクをクリックして移動する→要素は増えてない(この時console.logには"script load"が2回出力!?)
※以下繰り返す度、2回、2回と増える

ログは合計3回
イメージ説明

この結果が分からないのです。
・2回目以降のconsole.log出力が、なぜ2回ずつなのか?
・console.logは走ってるのに、なぜ要素追加は実行されないのか?どちらも同じスクリプト内に書いてるのに

どうか教えていただけないでしょうか。
先輩方宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

スクリプトは<body>内に直接書いてます。

Turbolinksを使うなら、「<body>にスクリプトを書く」ということ自体が適切ではありません。

投稿2021/03/06 03:14

maisumakun

総合スコア145975

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

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

pecchan

2021/03/06 03:21

有難う御座います。 それは承知の上であえて確認してる所でした。 rails6なのですが、「ページ単位で個別のscriptを使う」のは Turbolinksには適さないでしょうか? Turbolinksを使いたいなら、application.jsにまとめるべきでしょうか?
pecchan

2021/03/06 03:23 編集

これは、turbolinksの挙動確認のためで、 実際には、view最下部で<%= javascript_pack_tag 'items/show' %> のように個別のscriptを呼ぼうと思っておりました。
maisumakun

2021/03/06 03:24

> rails6なのですが、「ページ単位で個別のscriptを使う」のは Turbolinksには適さないでしょうか? Turbolinksを使いたいなら、application.jsにまとめるべきでしょうか? はい、そのとおりです。「全ページで同じJavaScriptを使う」のがTurbolinksの大前提です。
pecchan

2021/03/06 03:26

なるほど!有難う御座います!!
pecchan

2021/03/06 03:27

大前提を理解してませんでした。有難う御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問