2013-03-01 2 views
4

일부 데이터를 html 속성으로 게시하려고합니다. 레일 변수가 있다고 가정하십시오.html로 데이터를 게시하는 중 인용문이 있습니다.

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

jquery의 .data()에 사용할 페이지에 게시하고 싶습니다. 그래서 .html.erb에서 나는

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

을 가지고 있지만 렌더링하는 동안, 문자열에 인용 [{"name":"id","type":"integer"}] 엉망 때 form_tag 따옴표를 사용 레일 때문에 다른 속성은 큰 따옴표로 전체 JSON 문자열을 둘러싸. json을 문자열과 함께 Rails의 속성으로 게시하려면 어떻게합니까?

답변

0

다음을 시도해 보셨습니까? 여기

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

내 질문과 동일한 문제가 발생했습니다 – highBandWidth

0

내가 문제 측면-강화하는 방법이다 : form 태그에서

을, 나는 :"data-fields" => @fields.to_json.gsub('"',"'")했다.

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

그리고에서, JS, 나는이처럼 검색 :

$.parseJSON($('form').data('fields').replace(/'/g,'"')) 
+1

이것이 "부업"이 될 수 있음을 알고 있지만 별도의 데이터 필드로 json 파일의 각 항목을 보내고 있습니까? 예 : "데이터 ID"및 "데이터 유형". 귀하의 질문에 대한 답변이 아니므로 의견으로 게시하겠습니다. 문제 해결 방법은 여전히 ​​있습니다. 나는 더 단순한 해결책을 찾을 수있을 때 그 문제를 너무 복잡하게 생각할지도 모른다고 생각하고 있습니다. 그리고 절대로 내 말은 완벽한 것이 아닙니다 ... –

+0

이 경우에 가능한 해결 방법은'[{id : 1, type : a}, {id : 2, type : z}, ...]'그래서 두 배열을 만들고 인덱스를 사용하여 링크를 만들 수 있습니다. 일반적인 경우에는 유효한 json 속성을 첨부하는 방법이 있어야합니다. – highBandWidth

+0

기술적으로 말이 맞아요. 그것은 가능해야합니다. 그러나 논리적으로는 빈번히 발생하는 것이 아니기 때문에 마음이 녹지는 않을 것입니다. 알아 내면 알려주세요.매우 유용합니다 : P –

0

당신이 escape_javascript를 시도

이 이런 종류의 HTML을 생산? known downsides이 있지만 JSON을 이스케이프 처리하는 것은 아닙니다. 이스케이프 처리 된 따옴표가 HTML 속성에서 작동하는지 확신 할 수 없습니다.

0

serializer를 사용하여 상황을 해결하는 episode on railscasts이 있습니다. 요점은 serializer가 큰 따옴표를 $ quot로 대체한다는 것입니다. 또한 serialuzer는 직렬화 할 속성을 선택하고 연결을 포함 할 수있는 기능을 제공합니다.

+0

시리얼 라이저는 액티브 레코드 용입니다. erb 파일 내부의 질문처럼 레일 해시/배열에 json을 쓰려면 어떻게해야합니까? – highBandWidth

0

일부 시행 착오 끝에 이것이 효과가 있습니다.

서버 측 :

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

생성 된 HTML : JQuery와의 데이터 방법 사랑의

<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"> 

자바 스크립트 내가 레일 2.3.8 및 JQuery와 레일 2.2을 사용하고

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

.1

+0

나를 위해 작동하지 않습니다. 생성 된 HTML은

'어디서나 큰 따옴표를 사용하면 브라우저가 ' – highBandWidth

+0

보기에서 정확한 코드를 붙여 넣을 수 있습니까? – Andreyy