适用范围在coffeescript

时间:2013-02-21 19:23:47

标签: coffeescript

我正在使用coffeescript处理Web应用程序。

  • 我把所有课程都放在不同的文件中。
  • 这些类引用了一些全局常量(声明我的应用程序)。

我想从另一个文件main.coffee中创建这些对象的实例。

如何在应用程序范围内拥有类和常量?

3 个答案:

答案 0 :(得分:0)

您需要使用--bare选项编译所有文件,这样可以通过“全局”范围(浏览器环境中的window变量)使所有类可用,或者您可以定义你自己的window.MyNamespace = {}并明确地让你的课程可用:

class MyClass
   ...

window.MyNamespace.MyClass = MyClass

你已经标记了你的帖子requirejs,我相信它有更好的解决方案来构建模块,而不是我给你的问题提出的任何建议,其中每个模块实例都被明确传递,但requirejs是它本身就是一个完整的主题。

答案 1 :(得分:0)

我注意到100%知道amd是如何工作的,但是尽管MyNamespace和编译器选项--bare,您可以在使用coffeescript编译器编译之前将文件连接成一个“大”文件。

答案 2 :(得分: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()