2010-08-05 6 views
6

내가 할 계획 인 기능은 select 태그에서 선택한 숫자에 따라 양식 요소를 삽입하는 것입니다.jquery와 haml에서 부분 렌더링

number_of_passengers라는 select 태그가 있는데, 선택한 번호에 대해 새로운 승객 필드를 동적으로 추가 할 계획입니다. number_of_passengers에서 2를 선택하면 필드 세트에 2 개의 양식이 나타나야합니다. 이러한 양식은 내가이 다음과 같은 노력 등 이름, 나이 무게

포함 :

call a rails function from jquery?

을하고 그냥 발언을 HAML 것이 아니라 내가 사용할 때마다 나는 오류를 얻을 변환 : 자바 스크립트 태그입니다. 또한 나는 지역에 @booking 변수를 전달 어떻게, 나 또한 내가 form_for에서 오전 이후

:javascript 
    $('#number_of_passengers').change(function() { 
    var $num_of_passengers = $(this).val(); 
    for($i=0; $i<$num_of_passengers;$i++) { 
     $('.passenger-info ul').append('<%= escape_javascript(render :partial => "new_passenger", :locals => {:booking => @booking }) %>'); 
    } 
    }) 

에서 오전 일단 내가 자바 스크립트 태그를 "탈출"할 수 있다고 생각하지 않는다? 그것은 정말로 복잡해 보인다. 그리고 나는 단지 20 번 반복하는 것 (20 명의 최대 승객)에서 더러운 길을하고, 그 다음 단지 선택된 수에 따라 그들을 숨기거나 보여줄 것을 계획하고있다. 하지만 너무 더러운 것 같지 않아?

답변

3

실제로 가하여이를 위해 관리 :

respond_to do |format| 
    format.js { render :partial => "new_passenger" } 
end 

그렇게 요청 JS 사용한 경우에도, 그 부분의 HTML을 반환한다. Nifty

+0

내 대답을 시도해 본 적이 있습니까? 명확하지 않은 경우 : haml에서 erb 스타일 보간을 사용하고 있었지만 효과가있는 것을 발견했기 때문에 기꺼이 – nathanvda

+0

나는 여기에, 또한 자바 스크립트 조건부에 기반을 둔 HTML을 렌더링하는데 관심이있었습니다. "new_passenger"는 어디에 있습니까? 그리고 대답은 어디입니까? – Tass

+0

new_passenger는 컨트롤러와 동일한 뷰 폴더에 존재합니다. 내 케이스, bookingscontroller이 전화 했어 그래서 애플 리케이션 /보기/예약에 – corroded

0

레일 구문은 모든 시간을 변경하지만이

render :partial => "new_passenger", :locals {:booking => @booking }) 

당신이 루비 태그를 평가하고 있기 때문에

render :partial => "new_passenger", :locals => {:booking => @booking }) 

당신은 자바 스크립트 블록 내에서 자바 스크립트를 탈출 할 수 있어야한다.

표시되는 오류 메시지는 무엇입니까?

- form_for @user do |f| 
    # f.object is equal to @user 
+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 나는 병에 걸려 들었다. 어쨌든, 오타가 이미 수정되었지만 여전히 난처한 상황입니다. 나는 약간의 질문을 편집하고 문제를 보여줄거야 – corroded

12

당신이

!= "$('.passenger-info ul').append('#{escape_javascript(render :partial => 'new_passenger', :locals => {:booking => @booking })}'); 
같은 것을 할 필요가 작업 보간을 얻으려면 :

질문의 후반부 당신을 위해 무엇을 찾고있는 나에게 분명하지 않지만 이것이다

이렇게 간단하게 말했다 : 라인의 시작 부분에 !=을 추가하고 큰 따옴표 사이에 문자열을 포함 시키십시오.

@booking에 관한 질문 : 사용자에게 명확하게하기 위해 중첩 된 양식 예제를 조사하는 것이 좋습니다 (예 : thisthis railscast).

+0

흠, 고마워! ! = 의미는 무엇입니까? 나는 단지 이것을 하드 북 코드 된 js (수동으로 html 형식을 삽입했기 때문에 ... 더티지만 작동한다) 때문에 지금은 책갈피로 만들고 나중에 체크인 할 것이다. – corroded

+0

'! ='는 이스케이프 처리없이 HTML을 이스케이프 처리하지 않음을 의미하므로 루비 문자열을 그대로 삽입합니다. 문자열을 평가하고 이스케이프 처리하는 일반'='과는 대조적으로 HTML에 안전하게 포함 할 수 있습니다. 자세한 내용은 http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE를 참조하십시오.html # unescaping_html – nathanvda

+1

심지어 더 쉬워 ... 사용 : plain 필터 (not : javascript). – Karl