在Rails中创建自定义JS数组/哈希

时间:2012-12-06 16:31:13

标签: javascript ruby-on-rails ruby json

我需要创建然后通过数据标记将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数据标签,但遇到了同样的问题。

有谁知道问题可能是什么?任何帮助将不胜感激!

1 个答案:

答案 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="[{&quot;x&quot;:1333065600000,&quot;title&quot;:&quot;some title&quot;,&quot;text&quot;:&quot;some text&quot;}]" 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>

我认为是你所追求的。