2012-05-14 2 views
1

사용자가 내 사이트로 이동하면 index.html.haml과 index.js.haml을 모두 렌더링하려고합니다. (보기에서 내 JS 가져 오려고 해요.)레일 : 하나의 요청으로 html과 js 렌더링하기

현재, 그냥 html로 렌더링합니다. respond_to 블록을 html과 js로 추가하면 물론 html로 렌더링됩니다.

어떻게하면됩니까? 더 좋은 방법이 있습니까? JS를/assets/js에 포함하고 싶지는 않습니다. 왜냐하면 루비가 JS에서 실행되기 때문입니다.

+0

javascript는 btw (그냥 헤드 업)로 렌더링되지 않습니다. 렌더링은 사용자에게 콘텐츠를 표시합니다. – thejartender

답변

2

레일 컨트롤러 동작은 한 번에 하나의 HTTP 요청에만 응답 할 수 있으며 둘 이상에 응답 할 수있는 경우에도 HTML에서 JS가 요청 되었더라도 초기 요청은 어떤 식 으로든 작성되었습니다 (별도의 요청이므로).

Javascript를 명확하게하기 위해 다른 파일에 보관하려면 부분을 생성하고 그런 방식으로로드하십시오. 제어기 부분 (./views/mycontroller/my_action.html.erb)에 전달 @my_var 함께 행동에 응답 뷰

:

<%= render 'my_action_js', :my_var => @my_var %> 

그리고 부분 (./views/mycontroller /_my_action_js.html.erb)

<script type="text/javascript"> 
    alert(<%= my_var %>); 
</script> 
+0

유익한 답변에 많은 감사를드립니다. –

+0

@KreeK, 자바 스크립트 부분을 ajax 폴링 요청으로 DB에서 데이터를 가져온 다음 Rails와 같이 처리하는 것입니까? – yeenow123

+0

@ yeenow123 레일스 방식인지 확실하지는 않지만 그걸 잘못 본 것은 없습니다. 내 일반적인 규칙은 작은 양의 데이터가 원본 요청과 함께 전달되는 경우입니다. 크기가 크고 페이지에서 무언가를 얻으려는 경우 사용자가 보석을 풀지 않고 사실 이후에로드하는 경우입니다. – kreek

관련 문제