2013-06-19 5 views
0

내 레일 컨트롤러에 정의 된 다음 변수 않은 :이 변수의 값을 변경하려면 자바 스크립트에서Rails 스크립트의 전역 변수를 JavaScript에서 어떻게 수정합니까?

$PATH 

는 :

<script> 
    $("#resetDefaults").click(function(){ 
     $PATH = '3'; //try 1 
     <%= $PATH %> = '3'; // try 2 
    }); 
</script> 

내가 할 수있는 위의 두 문장 모두를 시도하고있다 그것을하는 방법을 알아낼 수 없습니다.

+3

'글로벌'용어로 혼란 스러울 수도 있습니다. 여기서는 레일즈 애플리케이션을 실행하는 Ruby 프로세스의 모든 컨텍스트에서 사용할 수있는 변수를 참조합니다. 자바 스크립트는 클라이언트 브라우저에서 실행되므로 해당 프로세스에서 여러 수준이 제거되므로이 작업을 수행하려면이 경로를 변경하려면이 경로를 변경해야합니다. 그러나 나는 이것이 좋은 생각이 될만한 어떤 상황도 생각할 수 없다. 해결하려는 문제를 설명해 주시겠습니까? –

+0

+1 @ ZachKemp for "그러나, 나는 이것이 좋은 생각이 될만한 어떤 상황도 생각할 수 없다." –

답변

1

글로벌 변수는 서버에서 실행되는 루비 코드의 글로벌 입니다.

브라우저에서 JavaScript 코드를 실행하고 있습니다. 이 코드는 서버의 변수에 직접 액세스 할 수 없습니다.

서버의 일부 상태 (변수)를 변경하려면 JavaScript 코드에서 Rails 컨트롤러 메서드를 호출해야합니다. 즉, 브라우저에서 서버로 AJAX 호출을해야합니다. 이런 식으로 뭔가 :

def update_path_var 
    $PATH = 1234 
    render :nothing => true 
end 

http://api.jquery.com/jQuery.ajax/
http://apidock.com/rails/ActionController/Base/url_for

BTW, 일반적으로 루비에서 전역 변수를 사용하는 것은 고려하지 좋은 코딩 사례 : 컨트롤러에서 다음

$("#resetDefaults").click(function() { 
    $.ajax({ url: "<%= url_for(:action => 'update_path_var') %>" }); 
    return false; 
}); 

당신이 뭔가처럼이 , 아주 특별한 이유가없는 한.

+0

보기를 변경하지 않고이 작업을 수행 할 수 있습니까? –

+0

@SamanthaKlonaris 음 ...보기를 변경하지 않고 무엇을 의미합니까? 보기에서 코드를 변경해야합니다. 클릭 방법은 컨트롤러를 호출해야합니다. – Casper

+0

새로운 뷰 렌더링을 의미합니다. –

0

달성 방법이 없습니다. 나는 당신이 웹 프로그래밍 과정에 대한 소개를해야한다고 생각한다.

관련 문제