2

test.jsに次のCoffeescriptがあります

yo () -> console.log("yo")

Coffee -o public / javascripts / -cw public /coffeescripts /を介してコンパイルすると、public / javascripts/test.jsが取得されます。

// Generated by CoffeeScript 1.4.0
(function() {
  var yo;

  yo = function() {
    return console.log('yo');
  };

}).call(this);

私はこれを通常の方法でHTMLファイルに含めようとしています。

<script src="/javascripts/test.js" type="text/javascript"></script>
<script type='text/javascript'>
  //<![CDATA[
  $(function() {
    alert('before yo');
    yo();
    alert('after yo');
  });
  //]]>
</script>

ただし、「キャッチされていない参照エラー:yoが定義されていません」というメッセージが表示され続けます。Coffeescriptによって生成されたjavascriptを実際に使用するためのプロセスは何ですか?

4

2 に答える 2

3

CoffeeScriptファイルでyoは、はローカル変数です。これはグローバル変数ではありません。yo別のJavaScriptファイルまたはHTMLファイルのJavaScriptからその変数を使用する場合は、グローバル変数を作成する必要があります。

次のように、CoffeeScriptファイルでこれを行うことができます。

yo = -> ...

# either
@yo = yo
# or
window.yo = yo
于 2013-01-24T16:45:03.930 に答える
2

Coffeescriptから生成されたJavascriptはyo、呼び出し元のコンテキストの外にエクスポートするために微調整する必要があります。

// Generated by CoffeeScript 1.4.0
(function(context) { // changed this line (note: context == 'this' which is being passed in at last line)
  var yo;

  yo = function() {
     return console.log('yo');
  };

  context.yo = yo; //export yo to the context.

}).call(this);

一般的に、の代わりに、 (サーバー側のNode.js呼び出しコンテキストとは対照的に)Webページのコンテキストでコードが使用されたときにthis人々が渡されるのを見ることができますかwindowdocument

Javascriptを更新しましたが、ここで詳細を読むことができる「モジュールエクスポート」イディオムを簡単に使用できます -CoffeeScriptモジュールのパターン

于 2013-01-24T17:07:12.123 に答える