4

我想将一些数据作为 html 属性发布。假设有一个 rails 变量

@fields = [{:name => "id", :type => :integer}]

我想在页面中发布与 jquery 的 .data() 一起使用。所以在 .html.erb 我有

<%= form_tag( {:action => 'whatever'}, {... , :"data-fields" => h(@fields.to_json)}) %>

但是在渲染时,字符串中的引号[{"name":"id","type":"integer"}]会混淆其他属性,因为 Rails form_tag 使用双引号将整个 json 字符串括在双引号中。如何发布带有字符串的 json 作为 Rails 的属性?

4

5 回答 5

0

你试过escape_javascript吗?虽然它有缺点,但它并不完全用于转义 JSON,而且我不确定转义的引号是否适用于 HTML 属性。

于 2013-03-07T13:23:25.337 回答
0

您是否尝试过以下操作?

<%= form_tag { :action => "whatever" }, { :data => { :fields => h(@fields.to_json) } } %>
于 2013-03-01T23:03:26.900 回答
0

以下是我回避问题的方法:

在表单标签中,我做了:"data-fields" => @fields.to_json.gsub('"',"'").

这会产生这种 HTML:

"data-fields"="[{'name':'id','type':'integer'}]"

然后,在 JS 中,我像这样检索它:

$.parseJSON($('form').data('fields').replace(/'/g,'"'))
于 2013-03-01T23:47:16.893 回答
0

经过一些试验和错误,这是可行的。

服务器端:

<% @fields = [{:name => "id", :type => :integer}] %>
<%= form_tag( '/posts/new', {id:'example',:data => { :fields=>@fields}}) %>

生成的 HTML:

<form accept-charset="UTF-8" action="/posts/new" data-fields="[{&quot;name&quot;:&quot;id&quot;,&quot;type&quot;:&quot;integer&quot;}]" id="example" method="post">

带有 JQuery 数据方法的 Javascript

fields = $('#example').attr('data-fields')

我正在使用 rails 2.3.8 和 jquery-rails 2.2.1

于 2013-03-13T13:03:35.697 回答
0

railscasts有一集使用序列化程序解决您的情况。关键是序列化程序用 $quot; 替换了双引号。serialuzer 还使您能够选择要序列化和包含关联的属性。

于 2013-03-11T17:56:46.250 回答