概要
- jQueryでsetIntervalを使い、ページのreload(自動更新)機能を作ろうとしていました。
- reload(自動更新)したかったのは、indexページだけだったのですが、turbolinksというrailsにもともと備わっている機能のせいで、全ページにreload(自動更新)機能が発生・・・・・・
- その解決法を説明。
turbolinksについて
- この記事(とそこで紹介されている記事)が参考になります。 Turbolinksさんと上手く付き合う10の方法
解決したコード
reload.js
function reload() {
中略
}
var pathname = location.pathname.match(/messages/)
var reg = RegExp(pathname);
if(reg.test("messages")){
setInterval(reload,60000)
}
- こうすると、URLにmessagesが含まれているページだけで(自分が作っているアプリでは,messagesをURLに持つビューはindexのみ)、setIntervalが発火する。
コードの説明
var pathname = location.pathname.match(/messages/)
- location.pathnameで現在いるページのパスが取れる。.match(/messages/)でその中から、messagesを抽出する。
var reg = RegExp(pathname);
- 変数pathnameを正規表現化する(この後、testを使うため。)
if(reg.test("messages")){
setInterval(reload,60000)
}
- 正規表現(reg).test("文字列")で,regに文字列が含まれている場合、trueを含まれていないとき、falseを返す。
- 今回だと、regにmessagesが含まれていると、trueになり、setIntervalが発火する。