2011-01-12 9 views
19

にCoffeeScriptのクラスを実行している私はCoffeeScriptの中document.ready

class Main 
    test:-> 
     alert "yay!" 

を持っている、と私は私の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に接続することで明示的にグローバルにする必要があります。

# 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 

これはにコンパイル:あなたはこのようにjQueryを使用することができますdocument.ready後のCoffeeScriptを実行するには

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

:それはやっている

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

何)jQueryの(関数(実行されています{コールバック...})このリンクの第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 
関連する問題