2011-01-12 30 views
19

運行CoffeeScript的類我有上的document.ready

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 2012-09-12 08:08:02

回答

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(){()(){ new Main() },1000); \t \t});希望能幫助到你。 – Devrim 2011-01-12 20:23:37

9

Coffeescript將您的代碼包裝在函數調用中,因此您不會意外覆蓋全局變量。

如果您希望任何變量,函數或類都是全局變量(因此可以通過其他文件訪問它們),則需要將它們附加到全局變量中,將它們附加到thiswindow

# 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 

這編譯爲:

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

後的document.ready,你可以使用jQuery像這樣執行的CoffeeScript:

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

那是什麼做的是運行的jQuery(函數() {callback ...})像這個鏈接的第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