Meteor> 0.6.0和CoffeeScript的全局类

jbm*_*sso 17 coffeescript meteor

自Meteor 0.6.0发布以及添加文件级JavaScript变量范围以来,我遇到了使用CoffeeScript类的问题,每个类都在各自的文件中定义.

foo.coffee:

class Foo
  ...
Run Code Online (Sandbox Code Playgroud)

subfoo.coffee:

class Subfoo extends Foo
  ...
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,并且由于Meteor 0.6.0中引入的更改,我收到以下错误:

ReferenceError:未定义Foo

这是我的问题:如何使用CoffeeScript和Meteor> 0.6.0处理文件中的类定义?理想情况:是否有一种方便的方法是不要过多地修改类的定义方式,以确保这些定义(以及我的应用程序的核心部分)不依赖于Meteor?

Dav*_*don 25

正如文档的CoffeeScript部分所述:

可以使用这个(或Cof​​feeScript的@速记)在CoffeeScript中设置全局变量

事实证明,CoffeeScript类可以定义为:

class @Foo
Run Code Online (Sandbox Code Playgroud)

编译为:

this.Foo = (function() {
  function Foo() {}
  return Foo;
})();
Run Code Online (Sandbox Code Playgroud)

假设foo.coffeesubfoo.coffee您可以执行之前加载:

class @Subfoo extends Foo
Run Code Online (Sandbox Code Playgroud)

当然,假设Subfoo需要将其分配给全球范围.还值得一提的是,您需要以类似的方式公开您的馆藏.例如:

@Players = new Meteor.Collection 'players'
Run Code Online (Sandbox Code Playgroud)

  • 是的,我只是重写了整个答案.希望其他人能够快速找到他们现在需要的信息. (2认同)
  • 请注意,当您设置`@Player'时,您仍应将其称为其他地方的玩家.(因为`@Player'不能深入其他功能等) (2认同)