0

私はcoffeescriptを使用してWebアプリケーションに取り組んでいます。

  • 私はすべてのクラスを別々のファイルに持っています。
  • クラスはいくつかのグローバル定数を参照します (my my app と宣言されています)。

これらのオブジェクトのインスタンスを別のファイル main.coffee から作成したいと考えています。

クラスと定数をアプリケーション スコープに含めるにはどうすればよいですか?

4

3 に答える 3

0

私はamdがどのように機能するかを100%知ってMyNamespaceいますが、とコンパイラーのオプションにもかかわらず--bare、coffeescriptコンパイラーでコンパイルする前にファイルを1つの「大きな」ファイルに連結することができます。

于 2013-02-21T19:47:27.487 に答える
0

オプションを使用してすべてのファイルをコンパイルする必要があり--bareます。これにより、すべてのクラスが「グローバル」スコープ (windowブラウザー環境の変数) を通じて使用可能になります。または、独自に定義して、次のwindow.MyNamespace = {}ようにクラスを明示的に使用可能にすることができます。

class MyClass
   ...

window.MyNamespace.MyClass = MyClass

requirejs各モジュールインスタンスが明示的に渡されている質問に与えた提案のいずれよりも、モジュールを構造化するためのさらに優れたソリューションがあると思われる投稿にタグを付けましたが、requirejs はそれ自体で全体のトピックです。

于 2013-02-21T19:35:02.373 に答える
0

他の回答はそれを示唆していますが、ファイル内のすべて--bareの最上位宣言をグローバルにするため、おそらくコンパイルしたくないでしょう。クラスだけでなく、補助関数、定数、およびでのみ使用されるものも含まれます。そのファイルと、おそらくグローバル名前空間に配置したくないでしょう。

明示的に使用することをお勧めします。これにより、そのクラスがグローバル名前空間にclass window.MyClass配置されます。

または、アプリケーションの名前空間がある場合、たとえば、宣言するファイルに次のように記述します。

# Namespace for application stuff.
window.App = {}

次に、次の方法でクラスをその名前空間に配置できます。

# In another file; make sure the first file gets executed before so `App` exists.
class App.MyClass

そして、名前空間を含めて参照することで、どこからでもそのクラスをインスタンス化して使用できます。

c = new App.MyClass
c.someMethod()
于 2013-02-21T23:51:02.760 に答える