说我有这样的哈希{“onDoubleClick”=>“function(e){alert(e.message);}”} 当我在客户端上获取json时,如何获取函数而不是字符串。
像这样:{ “onDoubleClick”:功能(E){警报(e.message);}}
我尝试将#放在开头但不起作用。{“onDoubleClick”=>“#function(e){alert(e.message);}”}
以前有人遇到过这个问题吗? 感谢
答案 0 :(得分:2)
如果可能,您应该从服务器而不是字符串输出它作为文字函数。这样可以节省你的字符串parse-as,然后在客户端上保存eval()。
如果无法输出文字函数,可以在其上调用eval()将其转换为函数。如果名为o的变量存储JSON的结果,则可以运行:
o["onDoubleClick"] = eval(o["onDoubleClick"]);
将字符串计算为函数并将其存储回相同的变量中。
答案 1 :(得分:1)
为了解决这个问题,我创建了一个对象来保存“未加引号”的Javascript项,例如函数输出,然后向Hash添加了一个“to_javascript”,它使用了不带引号的版本来使它可用。
例如,这对我有用: options [:controls] = { :bold => {:visible =>真正}, :italic => {:visible =>真正}, :underline => {:visible =>真正}, :insertUnorderedList => {:visible =>真正}, :lol => { :visible =>真正, :exec => JavascriptUnquoted.new(“function(){$('## {html_id}')。wysiwyg('insertImage','/ images / lol_emoticon.jpg');}”) }
options.to_javascript ==> {“controls”:{“italic”:{“visible”:true},“underline”:{“visible”:true},“insertUnorderedList”:{“visible”:true},“lol”:{“visible” :true,“exec”:function(){$('#review_text')。wysiwyg('insertImage','/ images / lol_emoticon.jpg'); }}
答案 2 :(得分:0)
尝试使用eval():
var key = "OnDoubleClick";
var value = "function(e){alert(e.message);}";
eval("var " + key + "=" + value);