我需要创建然后通过数据标记将Rails中的数组/哈希传递给Javascript。
Javascript需要格式化如下:
[{x: 1333065600000, title: 'Title', text: 'Text'}, {x: 1333065600000, title: 'Title', text: 'Text'}]
我在Rails中创建了一个帮助器方法来创建这种类型的语法:
def flags
@flags = '['
@model.flags.each do |f|
@flags += "{ x: 1333065600000, title: '#{f.title}', text: '#{f.text}'},"
end
@flags += ']'
end
然后将数据传递到Javascript中,如下所示:
<%= content_tag 'div', '', id: 'container', data: {flags: flags} %>
HTML源代码看起来是正确的,但是它们是经过编码的。尽管如此,div显示没有任何错误,但也没有任何标志。直接在Javascript中输入确切的结果会正确显示标志。
我知道数据标签是自动进行JSON编码的,所以我也尝试使用嵌套在其中的ERB标签的标准HTML数据标签,但遇到了同样的问题。
有谁知道问题可能是什么?任何帮助将不胜感激!
答案 0 :(得分:0)
这是编写助手的一种更简洁的方法,返回数组而不是人为的JSON字符串。
def flags
@flags = []
@model.flags.each do |f|
@flags << { x: 1333065600000, title: f.title, text: f.text }
end
@flags
end
我不确定你要完成什么,如
<div data-flags="[{"x":1333065600000,"title":"some title","text":"some text"}]" id="container"></div>
是预期的输出。在将其解析为JSON编码字符串之前,您需要解码data-flags
属性。
如果由于某种原因你想要单引号而不是双引号,你可以用
来做content_tag 'div', '', id: 'container', data: { flags: raw(x.to_json.gsub(/\"/, "'")) }
这将产生
<div data-flags="[{'x':1333065600000,'title':'some title','text':'some text'}]" id="container"></div>
我认为是你所追求的。