20

私は持っています

class Main
   test:->
      alert "yay!"

Coffeescriptで、index.html内で実行したい

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

ウェブサイトにこれに関するメモがあります、それはそれが機能しないだろうと言います。しかし、私はそれを機能させる方法を見つけることができませんでした。何か案は?私はcoffeescriptクロージャーラッパーが何であるかを知る必要があります。

それとも、coffeescriptはdocument.readyの後に実行されますか?

どうも!

4

4 に答える 4

26

document.ready の後に Coffeescript を実行するには、次のように jQuery を使用できます。

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

それがしているのは、このリンクの 3 番目のセクションのように jQuery(function () { callback... }) を実行することです: http://api.jquery.com/jQuery/

これは基本的にこれを言います:

jQuery( callback ) 戻り値: jQuery 説明: DOM の読み込みが完了したときに実行される関数をバインドします。

ドキュメントの外部ですべてのクラスなどを宣言し、init 関数を呼び出して適切なタイミングで実行します。

それが役立つことを願っています!

于 2011-11-16T06:49:53.853 に答える
24

class Main

class @Main代わりに試してください。

obv Main.test(); 動作しません

右。new Main().test()またはである必要がありますMain::test()

とにかくdocument.readyの後にcoffeescriptを実行しますか?

extras/coffee-script.jsを介して実行し、jQuery を使用していると仮定すると、はい。

于 2011-01-12T01:08:21.370 に答える
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

これは次のようにコンパイルされます。

(function() {
  myNotGlobalFunction(function() {
    return;
  });
  this.myGlobalFunction(function() {
    return;
  });
  this.myOtherGlobalFunction(function() {
    return;
  });
}).call(this);
于 2011-02-06T06:02:44.470 に答える
0

私も以前にこの問題に遭遇しました。まず、クラスを定義しているので、それをインスタンス化する必要があります。test次に、インスタンスで関数を呼び出すことができます。

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

ただし、ブラウザがMainクラスを見つけられないことに気付いたかもしれません。Mainこれは、CoffeeScriptがコンパイルされるときに、グローバルにアクセスできないようにするために、クラス定義の周りに自己実行関数をラップするためです。グローバルにアクセスできるようにする場合は、接頭辞としてwindowを付けることができます。

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

または、定義後に割り当てます。

class Main
   test:->
      alert "yay!"

window.Main = Main
于 2012-10-01T16:23:01.433 に答える