私はcoffeescriptを使用してWebアプリケーションに取り組んでいます。
- 私はすべてのクラスを別々のファイルに持っています。
- クラスはいくつかのグローバル定数を参照します (my my app と宣言されています)。
これらのオブジェクトのインスタンスを別のファイル main.coffee から作成したいと考えています。
クラスと定数をアプリケーション スコープに含めるにはどうすればよいですか?
私はcoffeescriptを使用してWebアプリケーションに取り組んでいます。
これらのオブジェクトのインスタンスを別のファイル main.coffee から作成したいと考えています。
クラスと定数をアプリケーション スコープに含めるにはどうすればよいですか?
私はamdがどのように機能するかを100%知ってMyNamespace
いますが、とコンパイラーのオプションにもかかわらず--bare
、coffeescriptコンパイラーでコンパイルする前にファイルを1つの「大きな」ファイルに連結することができます。
オプションを使用してすべてのファイルをコンパイルする必要があり--bare
ます。これにより、すべてのクラスが「グローバル」スコープ (window
ブラウザー環境の変数) を通じて使用可能になります。または、独自に定義して、次のwindow.MyNamespace = {}
ようにクラスを明示的に使用可能にすることができます。
class MyClass
...
window.MyNamespace.MyClass = MyClass
requirejs
各モジュールインスタンスが明示的に渡されている質問に与えた提案のいずれよりも、モジュールを構造化するためのさらに優れたソリューションがあると思われる投稿にタグを付けましたが、requirejs はそれ自体で全体のトピックです。
他の回答はそれを示唆していますが、ファイル内のすべて--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()