복붙노트

[RUBY-ON-RAILS] 레일 3.1 및 커피 스크립트에 오류 "변수를 찾을 수 없습니다"

RUBY-ON-RAILS

레일 3.1 및 커피 스크립트에 오류 "변수를 찾을 수 없습니다"

난 내 응용 프로그램 전체에서 사용하는 함수가 포함되어 내 application.js 파일을 참조 내 응용 프로그램에서 전망이 있습니다.

난 그냥 3.1의 가장자리 버전을 사용 한 후 레일 3.1 릴리스 후보를 설치했습니다. 나는 RC 내가 어떤 문제가 아니었지만 지금은이 오류를 받고 있어요 설치까지 :

indicator_tag는 application.js에 정의 된 함수 I입니다. 자바 스크립트 파일의 유일한 차이 나는 통지는 이제 내 모든 기능을 래핑하는 것입니다 :

(function() { ... }).call(this);

나는 이것이 변수 범위 지정에 대한 이해? 그러나 그 변수를 사용하는 내 페이지를 방지 할 수 있을까? 누군가가 요청하기 전에, 나는 확실히 자바 스크립트 경로 내 포함 태그 정확했습니다.

해결법

  1. ==============================

    1.기본적으로 모든 커피 스크립트 파일은 폐쇄 아래로 컴파일됩니다. 당신은 할 수 없습니다 당신이 전역 변수로 내보낼하지 않는 다른 파일의 기능과 상호 작용합니다. 이 같은 일을 권하고 싶습니다 :

    기본적으로 모든 커피 스크립트 파일은 폐쇄 아래로 컴파일됩니다. 당신은 할 수 없습니다 당신이 전역 변수로 내보낼하지 않는 다른 파일의 기능과 상호 작용합니다. 이 같은 일을 권하고 싶습니다 :

    모든 커피 스크립트 파일의 위에, 같은 줄을 추가

    window.Application ||= {}
    

    이것은 항상 세계라는 이름의 응용 프로그램 존재가 있다는 보장합니다.

    다른 파일에서 호출 할 필요가해야하는 모든 기능을 위해 지금, 그들을 정의

    Application.indicator_tag = (el) ->
      ...
    

    및 사용하여 전화

    Application.indicator_tag(params)
    
  2. ==============================

    2.Dogbert의 솔루션은 매우 정교한 JS의 백 엔드가 있다면 갈 수있는 좋은 방법입니다. 당신은 단지 당신이 최선을 다하고 기능의 소수있는 경우에는 훨씬 더 간단한 해결책이있다. 그냥 다음과 같이 윈도우 객체에 직접 추가 :

    Dogbert의 솔루션은 매우 정교한 JS의 백 엔드가 있다면 갈 수있는 좋은 방법입니다. 당신은 단지 당신이 최선을 다하고 기능의 소수있는 경우에는 훨씬 더 간단한 해결책이있다. 그냥 다음과 같이 윈도우 객체에 직접 추가 :

    window.indicator_tag = (el) ->
      ...
    

    그럼 당신은 다른 객체를 마무리 할 필요없이 어디서나 당신의 기능을 사용할 수 있습니다.

  3. from https://stackoverflow.com/questions/6089992/cant-find-variable-error-with-rails-3-1-and-coffeescript by cc-by-sa and MIT license