2011-01-12 7 views
19

document.ready에서 CoffeeScript 클래스 실행하기

class Main 
    test:-> 
     alert "yay!" 

coffeescript가 있고, 내 index.html

<script> 
    $(function(){ 
     //and obv Main.test(); doesn't work 
    }); 
</script> 

안에 웹 사이트에이 메모가 있습니다, 그것은 작동하지 않을 것이라고 말한다. 하지만 어떻게 작동시키는 지 찾을 수 없었습니다. 어떤 아이디어? coffeescript 클로저 래퍼가 무엇인지 알아야합니다.

또는 coffeescript가 document.ready 다음에 실행됩니까?

thx!

+0

대답은 여기에 아주 잘 커피 스크립트 전역을 설명 : HTTP : //stackoverflow.com/questions/4214731/coffeescript-global-variables – Marc

답변

24

class Main

대신 class @Main을보십시오.

obv Main.test(); 작동하지 않는다

오른쪽. new Main().test() 또는 Main::test()이어야합니다.

coffeescript는 document.ready 이후에 실행됩니까?

extras/coffee-script.js을 통해 실행하고 jQuery를 사용한다고 가정합니다.

+3

.coffee를 직접 포함시키고 coffee.js를 사용하여 컴파일하면 경합 조건이 발생하고 향후이 질문의 독자에게 조금 도움이됩니다. (CLI로 컴파일하면 괜찮습니다.)이 작업을 수행하려면 다음과 같이하십시오. \t \t $ (function() { \t \t \t setTimeout (function() { new Main() }, 1000); \t \t}); 도움이되기를 바랍니다. – Devrim

9

Coffeescript는 함수 호출에서 코드를 래핑하므로 실수로 전역 변수를 덮어 쓸 수 없습니다.

변수, 함수 또는 클래스를 전역으로 (다른 파일에서 액세스 할 수 있도록) 만들려면 this 또는 window에 연결하여 전역으로 명시 적으로 지정해야합니다.) (

$ -> 
    # Put your function code here 
    init() 

무슨이 jQuery를 실행하고있다 (기능 :

(function() { 
    myNotGlobalFunction(function() { 
    return; 
    }); 
    this.myGlobalFunction(function() { 
    return; 
    }); 
    this.myOtherGlobalFunction(function() { 
    return; 
    }); 
}).call(this); 
25

는이 같은 jQuery를 사용할 수 있습니다 document.ready 후 커피 스크립트를 실행하려면 :

# Stays within the function scope, so you can't access it outside the file 
myNotGlobalFunction -> return 

# Attaches it to `this` aka `window`, so can be accessed globally 
this.myGlobalFunction -> return 

# A shortcut using @ which is an alias to `this.` 
@myOtherGlobalFunction -> return 

이것은에 컴파일 {콜백 ...})이 링크의 3 섹션과 같습니다. http://api.jquery.com/jQuery/

기본적으로 다음과 같습니다 :

jQuery (콜백) 반환 값 : jQuery 설명 DOM로드가 완료 될 때 실행될 함수를 바인딩합니다.

필자는 문서 외부에있는 모든 클래스 등을 선언 한 다음 init 함수를 호출하여 적절한 시간에 실행되도록합니다.

도움이 되었기를 바랍니다.

0

이전에도이 문제가 발생했습니다.우선, 클래스를 정의하고 있기 때문에 클래스를 인스턴스화해야합니다. 그런 다음 인스턴스에 당신에게 test 함수를 호출 할 수 있습니다 :

<script> 
    $(function(){ 
     var an_instance_of_main = new Main(); 
     an_instance_of_main.test(); 
    }); 
</script> 

그러나 브라우저가 Main 클래스를 찾을 수없는 것을 눈치 챘을 것이다. 이는 CoffeeScript가 컴파일 될 때 Main이 전역 적으로 액세스 할 수 없게하기 위해 클래스 정의를 중심으로 자체 실행 함수를 래핑하기 때문입니다.

class window.Main 
    test:-> 
     alert "yay!" 

을하거나 정의한 후 할당 : 당신이 세계적으로 액세스 할 수 있도록하려는 경우, 당신은 창을 앞에 수

class Main 
    test:-> 
     alert "yay!" 

window.Main = Main 
관련 문제