我有一个。js。动词模板和我正在做的:
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 => "["bar"]"
foo3.replace(/"/g, """)) # => "['bar']" <-- looks like eval should work...
eval(foo3.replace(/"/g, """))[0]; # => "bar" ... it works
我不能忍受这样的工作……我试着做:
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...
底线,所有这些需要使用eval的东西是荒谬的——一定有更好的方法!有人能告诉我这是什么吗?
问题是。to_json逃避了html实体!
解决方案是:
var foo = & lt; % = {: lol =>["lmaonade"、"rotflcopter"]}.to_json.html_safe} %>
这给了我:
{"lol": ["lmaonade", "rotflcopter"]}
如果您需要处理@foo
为nil时,请尝试:
var foo = <%= (@foo.kind_of?(Array) ? $foo : [] ).to_json %>;
将Ruby哈希值转换为Javascript对象的操作如下:
<% hash = {:foo=>'bar'} %>
var js_hash = <%= hash.to_json %>;