RailsのViewファイルのインスタンス変数をJavaScriptから参照する
メモ。
別にRailsに限ったことではなくて、Webアプリケーションフレームワークとかを使っていて、テンプレートファイルで使ってる変数をJavaScriptから参照するやり方。
検索結果をlocalStorageでキャッシュしておきたいなど、いくつかの場面で必要になるかと思います。
(例)Viewファイルで、
<script> var piyo_id = <%= @piyo.id %>; </script> <div id="hoge"> <%= render "hoge/hoge_piyo", piyo: @piyo %> <!-- いろいろ --> </div>
って書くしかないのかと思ったけど、もっといい方法があった。
そう、HTML5の独自データ属性(data-* こんなやつ)。
Viewファイルで
<div id="hoge" data-hoge-id="<%= @piyo.id %>"> <%= render "hoge/hoge_piyo", piyo: @piyo %> <!-- いろいろ --> </div>
ってして、外部JSファイルから
var e = document.getElementById('hoge'); var piyo_id = e.getAttribute('data-hoge-id');
ってすればよかった。
ちなみに、jQueryだと、
var piyo_id = $('#hoge').data("hoge-id");
で、
Minified.jsだと、
var piyo_id = $('#hoge').get("%hoge-id");
こう。
以上。