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

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

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

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

Q&A

解決済

1回答

5003閲覧

【Ruby on Rails + jQuery】戻るボタンクリック度に、不要に描画イベントが走ってしまう

pecchan

総合スコア592

Ruby on Rails

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

0グッド

3クリップ

投稿2017/06/26 01:14

編集2017/06/26 01:16

Railsにfullcalendarを入れて社員の予定表を作りました。

予定表に表示された予定をクリックすると、詳細画面に遷移する作りにしました。

ここまでは良かったのですが、
ブラウザの戻るボタンクリックすると、カレンダーが追加されています。
同じ内容のカレンダーが2個になっていました。

その後、遷移→ブラウザバックごとにカレンダーが追加されてしまいます。

戻る度に、無駄に描画処理が走っているようですが
これを抑制するにはどうすれば良いでしょうか?

jQuery(coffee)に「すでに描画済みなら描画しない」といった処理が必要でしょうか?

それよりもっと効率的な方法があれば教えてください。

宜しくお願い致します。

calendar.coffee

jQeury

1document.addEventListener 'turbolinks:load', (e) -> 2 $('#calendar').fullCalendar header: {left: 'prev,next today',center: 'title',right: 'month,basicWeek,basicDay'},events: window.hoge_datas 3 return 4

予定表コントローラ

Ruby

1class PlanTablesController < ApplicationController 2 3 def index 4 5 #今月 6 @plans = ActionPlanNote.where(plan_date: Time.now.all_month) 7 8 @datas = []; 9 @plans.each {|p| 10 @datas += [ 11 'title' => p.employee.emp_name, 12 'start' => p.plan_date, 13 'end' => p.plan_date, 14 'color' => 'blue', 15 'url' => '/action_plan_dos/edit?date=' + p.plan_date.to_s + '&employee_id=' + p.employee_id.to_s 16 ] 17 } 18 19 end 20 21end 22

予定表View

ruby

1<%= javascript_tag do %> 2 window.hoge_datas = <%= raw @datas.to_json %>; 3<% end %> 4 5<div class="container-fluid"> 6 <div class="row"> 7 <div class="col-xs-4 col-xs-offset-2" > 8 <h1 class="page-title">予定表</h1> 9 </div> 10 <div class="col-xs-8 col-xs-offset-2" > 11 <div class="contents-box"> 12 <div id="calendar"></div> 13 </div> 14 </div> 15 </div> 16</div> 17 18

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

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

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

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

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

guest

回答1

0

ベストアンサー

Turbolinksは描画したものがページ遷移直前にキャッシュされますので、ブラウザバックすると、描画後のキャッシュされた状態に戻ってさらに描画される結果、二重描画になってしまいます。

いちばん手っ取り早いのは、ブラウザバックやプレビュー用のキャッシュを止めることです。<head>内に<meta name="turbolinks-cache-control" content="no-cache">と書けばキャッシュされなくなります。

投稿2017/06/26 01:28

maisumakun

総合スコア146018

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

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

pecchan

2017/06/26 01:47

maisumakun様 有難う御座います。 そういう原理なのですね。 <head>は、application.htmlで共通利用してるため、 出来ればキャッシュは利用しつつ回避したいです。。。
maisumakun

2017/06/26 01:49

となると、turbolinks:before-cacheイベントで表示したウィジェットを消す、というようなコードが必要となります。
pecchan

2017/06/26 02:33

有難う御座います。 スクリプトに、 document.addEventListener 'turbolinks:before-cache', -> $('#calendar').empty() return を追加しました。 有難う御座いました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問