2012-08-03 9 views
0

내가 인스턴스 변수를 정의하는 컨트롤러 # 액션이 커피 스크립트하는 catch되지 않은 오류 ReferenceError 내 Coffeescript에서 다음을 할 수 있습니다 :레일/자바 스크립트 : 나는 다음과 같은 한 관점에서</p> <pre><code>@min_rating = 4 </code></pre> <p>: 다음</p> <pre><code><%= javascript_tag do %> min_rating = <%= @min_rating %> <% end %> </code></pre> <p>통과 인스턴스 변수는

jQuery -> 
    alert min_rating 

그리고 내가보기의 페이지에 있다면, 그것은 프로 perly. 나는 응용 프로그램의 모든 뷰에 대한 모든 JS을로드하기 때문에

Uncaught ReferenceError: min_rating is not defined 

이것은 : 나는 다른보기에 나는 경우

그러나, 나는 var에 MIN_RATING가 정의되어 있지 않은 것을 말하는 JS 오류가 발생합니다. js :

//= require_tree . 

내 질문은 : 레일스에서 ​​이것을 처리하는 가장 좋은 방법은 무엇입니까?

+0

일부 사용자가 "// require_self"를 사용하도록 제안했거나 // require_tree 전체 문을 제거 할 수 있습니다. 그것을 시도하고 업데이 트하시기 바랍니다 – user1455116

+0

당신은 이것을보고 싶어 할 수도 있습니다 http://house9.blogspot.com/2011/05/rails-31-javascript-execution.html - 레일즈 assest 파이프 라인/자바 스크립트와 javascript를 실행하기위한 다른 옵션 – house9

답변

0

귀하의 목표에 따라 다릅니다. 하나의 간단한 옵션을 참조하기 전에 MIN_RATING 자바 스크립트에 정의되어 있는지 여부를 확인하는 것입니다 :

jQuery -> 
    if typeof min_rating != 'undefined' 
    alert min_rating 

또는 당신은 MIN_RATING 모든 페이지에 정의되어 있는지 확인 할 수 있습니다 - 아마도 장식에 그 javascript_tag 호출을 이동하고 다시 떨어지는 기본값. 귀하의 신청서에 적합한 지 여부는 귀하에게 달려 있습니다.

또는 필요하지 않은 페이지에서 min_rating에 참조되는 스크립트를로드하지 않도록 할 수 있습니다. 그러나 그것은 모든 페이지에서 동일한 결합 된 자바 스크립트 파일을 사용할 수 없다는 것을 의미합니다.

1

coffee 스크립트에는 var 문이 없으므로 coffee 스크립트의 모든 변수에 대해 자동으로 삽입되므로 컴파일 된 JavaScript 버전이 전역 이름 공간으로 모든 것을 유출하지 않습니다.

커피 스크립트 측면에서 의도적으로 전역 네임 스페이스에 "누출"을 만들 수있는 방법이 없으므로 전역 변수를 전역 개체의 속성으로 정의해야합니다.

attach them as properties on window 

<%= javascript_tag do %> 
    window.min_rating = <%= @min_rating %> 
<% end %> 

귀하의 coffeescript에서 min_rating에 액세스하십시오.

관련 문제

 관련 문제