0

我需要创建一个数组/哈希,然后通过数据标签将 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 源代码看起来是正确的,但是 's 是经过编码的。尽管如此,div 显示没有任何错误,但也没有任何标志。将确切的结果直接输入到 Javascript 中会正确显示标志。

我知道数据标签是自动 JSON 编码的,所以我也尝试使用标准的 HTML 数据标签和嵌套在其中的 ERB 标签,但遇到了同样的问题。

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

4

1 回答 1

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>

是预期的输出。您需要先解码data-flags属性,然后再将其解析为 JSON 编码字符串。

如果由于某种原因你想要单引号而不是双引号,你可以这样做

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>

我认为这就是你所追求的。

于 2012-12-06T16:44:32.650 回答