簡體   English   中英

如何使用.js.erb將ruby數據結構轉換為javascript數據結構?

[英]how can I convert ruby data structures to javascript data structures with .js.erb?

我有一個.js.erb模板,我正在做:

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是未定義的(因為瀏覽器抱怨解析錯誤)


我能弄清楚如何使foo3正常工作的唯一方法是:

var foo3 = "<%= ['bar'].to_json %>";    # foo3 => "[&quot;bar&quot;]"
foo3.replace(/&quot;/g, "\""))          # => "['bar']"  <-- looks like eval should work...
eval(foo3.replace(/&quot;/g, "\""))[0]; # => "bar" ... it works

我無法foo4以這種方式工作...我嘗試這樣做:

var foo4 = <%= "{:foo => 'bar'}.to_json" %>;  # foo4 => "{&quot;foo:&quot;:&quot;bar&quot;}" %>;
foo4.replace(/&quot;/g, "\""));               # => "{"foo":"bar"}"  <-- looks like eval should work
eval(foo4.replace(/&quot;/g, "\""));           # => "Parse error"   <-- but it doesn't...

最重要的是,所有需要使用eval的東西都是荒謬的-必須有更好的方法! 有人可以告訴我這是什么嗎?!?!

問題是.to_json使html實體轉義!

解決方法是:

var foo = <%= {:lol => [“ lmaonade”,“ rotflcopter”]}。to_json.html_safe}%>

這給了我:

{"lol": ["lmaonade", "rotflcopter"]}

如果您需要在@foo為零時進行處理,請嘗試以下操作:

var foo = <%= (@foo.kind_of?(Array) ? $foo : [] ).to_json %>;

像這樣將Ruby哈希轉換為Javascript對象:

<% hash = {:foo=>'bar'} %>
var js_hash = <%= hash.to_json %>;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM