私は.js.erbテンプレートを持っていると私はやっている:Rubyデータ構造を.js.erbを使用したjavascriptデータ構造に変換するにはどうすればよいですか?
var foo = <%= [1,2,3] %>;
var foo2 = <%= [1,2,3].to_json %>;
var foo3 = <%= ["bar"].to_json %>;
var foo4 = <%= {:foo => "bar"}.to_json %>;
fooが123の
foo2は等号[1,2,3]
foo3が定義されていないに等しい(ので、ブラウザで解析エラーが発生する)
foo4は未定義です(ブラウザで解析エラーが発生するため)
012私は仕事にfoo3を取得する方法を見つけ出すことができる唯一の方法が何をした:
var foo4 = <%= "{:foo => 'bar'}.to_json" %>; # foo4 => "{"foo:":"bar"}" %>;
foo4.replace(/"/g, "\"")); # => "{"foo":"bar"}" <-- looks like eval should work
eval(foo4.replace(/"/g, "\"")); # => "Parse error" <-- but it doesn't...
を:
var foo3 = "<%= ['bar'].to_json %>"; # foo3 => "["bar"]"
foo3.replace(/"/g, "\"")) # => "['bar']" <-- looks like eval should work...
eval(foo3.replace(/"/g, "\""))[0]; # => "bar" ... it works
私はこのように動作するようにfoo4ことができませんでした...私はやってみました
ボトムライン、これはすべてevalのものを使う必要がありますばかげています - よりよい方法でなければなりません!誰かが私にそれが何であるか教えてもらえますか?
foo.to_jsonは正しい方法です。 foo.to_jsonがjsソースでどのように変換されているか表示してください。 –
私はvar foo = <%= [1,2,3] .to_json%>を実行すると動作します.. fooを検査するとjs配列[1,2,3] ...が表示されますが、var foo = [ "a"、 "b"、 "c"]。to_json%>ページを読み込むときに "Parse error"と表示され、fooは定義されていません。 – patrick
追加情報を追加するには*あなたの質問を編集*してください。 Ruby js erbファイルの結果として、** Javascript **が何であるかを示してください。ブラウザ上で「解析エラー」と言っているだけです.JSファイルを調べることはできません。 –