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ソースコードは正しいように見えますが、はエンコードされています。それにもかかわらず、divはエラーなしで表示されますが、フラグも表示されません。この正確な結果をJavascriptに直接入力すると、フラグが正しく表示されます。

データタグは自動的にJSONエンコードされることを知っているので、ERBタグがネストされた標準のHTMLデータタグも使用してみましたが、同じ問題が発生しました。

誰かが問題が何であるか知っていますか?どんな助けでも大歓迎です!

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-flagsJSON エンコード文字列として解析する前に、属性をデコードする必要があります。

何らかの理由で二重引用符の代わりに単一引用符が必要な場合は、これを行うことができます

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 に答える