13

私はコーヒースクリプトで書かれたクラスを持っています、例えば、

class Example
  constructor: ->
    $.each [1, 2, 3], (key, value) =>
      @test = value
    return @test
  render: ->
    alert @test

このクラスは別のファイルExample.coffeeとして持っています

次に、メインのjavascriptファイルで次のようにインスタンス化できるようにします。

d = new Example
d.render()

ただし、クラスは、ページにスクリプトとして含まれている場合でも未定義です。

<script src="Example.js></script>
<script src="main.js"></script>

クラスをメインファイルで公開するにはどうすればよいですか?

4

3 に答える 3

28

windowクラスが名前空間にあることを宣言することにより、クラスをグローバルにアクセス可能であると宣言できます(少なくともブラウザーの場合) 。

class window.Example
  constructor: ->
    $.each [1, 2, 3], (key, value) =>
      @test = value
    return @test
  render: ->
    alert @test

それはExampleまっすぐに入れwindowます。class @Exampleほとんどの場合、言うこともできます。

デフォルトでは、CoffeeScriptは(function() { ... })()名前空間の汚染を防ぐために、各ファイルをラッパーでラップします。-bCoffeeScriptをコンパイルするときに提供することで、これを防ぐことができます。

-b, --bare
トップレベルの関数安全ラッパーなしでJavaScriptをコンパイルします。

しかし、それはあなたにとって選択肢ではないかもしれません(またはそれは醜いものかもしれません)。通常のアプローチは、クラスがロードされる前に、アプリケーション固有の名前空間をどこかで宣言することです。

// Probably in a <script> in your top-level HTML...
App = { };

次に、クラスに適切な名前空間を付けます。

class App.Example
    #...

次に、App名前空間を介してすべてを参照します。

于 2012-04-10T18:17:46.750 に答える
13

これは古いスレッドですが、他の誰かが役立つと思った場合は、クラスを「@」で宣言すると、.jsファイル外のファイルにアクセスできるようになり.coffeeます。

だから、でexample.coffee

class Introverted
  honk: ->
    alert "This class is visible within the .coffee file but not outside"

class @Extroverted
  honk: ->
    alert "This class is visible inside and outside of the .coffee file"

これはコンパイルされexample.js、次の場所で使用できますexample.html

<script src="example.js"></script>
<script>
var p = new Extroverted(); // works fine
p.honk();

var i = new Introverted(); // will fail with "Introverted is not defined"
i.honk();
</script>
于 2014-06-22T15:17:24.250 に答える
4

グローバル変数を作成する

window.Example = Example

于 2012-04-10T17:52:34.407 に答える