2011-03-16 7 views
3

자바 스크립트 함수 내에서 Rails 변수를 설정하는 데 문제가 있습니까? 나는 definete 응답을 Google에 할 수없고 다만 나가 모른 붙잡거나 결함이다는 것을 확인하고 싶었다. 실제로 자바 스크립트가 클라이언트 측에서 실행된다면 뷰가 렌더링 된 후에 뷰의 변수 변경에 Rails가 응답한다고 가정하지 않았을 것입니다.레일즈 - 자바 스크립트 함수 내에서 Rails 변수를 설정할 수 있습니까?

(예) 동일한 양식을 호출하는 여러 함수가 있는데 컨트롤러 메소드 (이 경우 세션은 쿠키)에서 특정 작업을 수행하는 양식을 호출하는 함수를 알아야 할 필요가 있지만 로컬 Rails 변수와 마찬가지로 작동합니다).

<script type="text/javascript"> 

    $('.open_new_item_form').click(function(){ 
    alert('<%= session[:item_form_type]%>'); 
     <% session[:item_form_type] = "from_new_item_click" %> 
    alert('<%= session[:item_form_type]%>'); 
     var url = $(this).attr("href"); 
     $.ajax({ 
etc... 

경고는 작동하는 것으로 보입니다. 현재의 valute와 그 이후의 새로운 "from_new_item"값으로 경고합니다.

감사합니다 - 단지 레일의 렌더링 프로세스의 확인

+0

우리가 문자열을 설정하는 대신 해당 세션에 자바 스크립트 변수를 전달할 수 있습니다. –

답변

1

부분을 해당보기 내의 모든 ERB 코드를 평가하는 것입니다. 코드 평가가 완료되면 레일즈가 파일을 렌더링합니다 (javascript, html 등).

레일이 가변적 인 변화에 반응 할 수 있다는 사실에 놀랐다면, 그 시점에서 뷰가 실제로 렌더링되지 않았기 때문입니다. 렌더링 과정에있었습니다.

+0

먼저 대답 했으므로 확인해보십시오. 나는 나 자신을 비웃고있다. 나는 그것이 지금 작동하는지 알아 냈다. CRUD 폼이 대화 상자에 나타나기 전에 페이지 디자인을 통해 'type'항목을 선택해야합니다.내가 할게요! – Reno

5

erb 파일이 서버에서 완전히 해석되고 있습니다. 자바 스크립트 렌더링의 일환으로 를 실행이 라인은 자바 스크립트는 클라이언트에서 실행하지 않을 때 :

<% session[:item_form_type] = "from_new_item_click" %> 

당신이 false로 평가되는 자바 스크립트 if 블록 내에서 코드 줄을 배치 할 경우, 서버 -를 측면의 변수는 여전히 변경됩니다 :

if(0){<% session[:item_form_type] = "from_new_item_click" %>;} 

1

다른 사람의 말처럼 (., 그것은 내가 말하는 언어하지 내 pidgin -javascript를 용서) 뷰는 먼저 서버에서 렌더링 된 다음 브라우저로 전송됩니다. 브라우저에 도달 할 때까지는 루비 코드가 모두 실행 된 이후로 브라우저에서 볼 수있는 자바 스크립트가 그 결과입니다. 브라우저에서 페이지의 소스를 보여 주려고합니다. 와, 어떤 클릭하지 않고,

alert('<%= session[:item_form_type]%>'); 

이미 대체되었습니다 : 당신이 정말로 서버 측의 RoR 코드를 변경하려는 경우

alert('from_new_item_click'); 

는 사용자가 걸리는 경우 해당 라인을 볼 수 액션을 사용하려면 AJAX를 사용해야합니다. 기본적으로 AJAX는 자바 스크립트 코드가 URL에 GET/POST를 보낼 수있게합니다. 따라서 .click 이벤트 핸들러 내에서 원하는 세션 변수를 변경하는 액션을 호출하는 URL을 누를 수 있습니다.

(죄송합니다 당신은 이미 모든 AJAX에 대해 알고있는 경우는. 난 당신이,하지만, 질문을 제공하지 않을 수 있습니다 의심)

+0

나는 완전히 열중하고 혼란 스럽다. 이 경우에 나는 실제로 실제로 좋다. 나는 어떻게 든 exhaused하고 어리석은 뭔가 내 특정 상황에서 작동에 비틀 거렸다. – Reno

관련 문제