簡単だ!
index.html.erbに対して次のビューを持つコントローラーがあるとします。
#GET /index.html
def index
@some_data = {:foo => [:bar0, :bar1]}
end
私たちのビュー(index.html.erb)では、最初にデータをHTMLに埋め込みます
<%= javascript_include_tag "index" %>
<div id="home_page">
<!-- Pass members to javascript -->
<div id="self" data-some_data='<%= @some_data.to_json %>'></div>
</div>
最後に、jQueryを使用していると仮定すると、index.jsのデータに簡単にアクセスできます。
$(document).ready(function() {
some_data = $("#self").data("some_data");
alert(some_data.foo[0]); //Says "bar0"
}
注意:返されたデータを単なる文字列ではなくオブジェクトのように使用する魔法の能力があるため、JSON.parseを使用する必要があります。例:
$(document).ready(function() {
//This will fail
some_data = JSON.parse($("#self").data("some_data"));
alert(some_data.foo[0]); //Says "bar0"
}
ただし、JSON.parseの使用は機能しません。JSON.parseから返される情報は必ずしも文字列である必要はなく、この場合はjavascriptオブジェクトでした。jQueryのデータ関数は、文字列を適切なjavascriptオブジェクトに暗黙的に変換しようとします。JSON文字列を含むデータ属性の場合、データ属性内の文字列は「javascriptオブジェクト」に変換されます。
の魔法の振る舞いが気に入らない場合は、の代わりに$.data
使用できますJSON.parse($("#self").attr("data-some_data"))
$("#self").data("some_data")