Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor全球课程>;0.6.0和CoffeeScript_Coffeescript_Meteor - Fatal编程技术网

Meteor全球课程>;0.6.0和CoffeeScript

Meteor全球课程>;0.6.0和CoffeeScript,coffeescript,meteor,Coffeescript,Meteor,自从Meteor 0.6.0发布和添加之后,我在使用CoffeeScript类时遇到了一个问题,每个类都在各自的文件中定义 foo.coffee: class Foo ... class Subfoo extends Foo ... 咖啡: class Foo ... class Subfoo extends Foo ... 正如所料,由于Meteor 0.6.0中引入的更改,我得到以下错误: ReferenceError:未定义Foo 我的问题是:如果CoffeeScr

自从Meteor 0.6.0发布和添加之后,我在使用CoffeeScript类时遇到了一个问题,每个类都在各自的文件中定义

foo.coffee:

class Foo
  ...
class Subfoo extends Foo
  ...
咖啡:

class Foo
  ...
class Subfoo extends Foo
  ...
正如所料,由于Meteor 0.6.0中引入的更改,我得到以下错误:

ReferenceError:未定义Foo


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

如以下内容的CoffeeScript部分所述:

全局变量可以在CoffeeScript中使用此(或 咖啡脚本(速记)

事实证明,CoffeeScript类的定义如下:

class @Foo
其汇编目的是:

this.Foo = (function() {
  function Foo() {}
  return Foo;
})();
假设
foo.coffee
subfoo.coffee
之前加载,则可以执行以下操作:

class @Subfoo extends Foo
当然,假设需要将
subfo
分配给全局范围。同样值得一提的是,您需要以类似的方式公开您的收藏。例如:

@Players = new Meteor.Collection 'players'

还请注意,“Foo”等类本身就是一个值,您可以将其分配给变量或自己放入命名空间中

当您希望将该值直接放入全局名称空间时,使用
class@Foo
是一个很好的快捷方式

但如果愿意,也可以将变量保留为本地变量,然后自己将其添加到全局命名空间:

class Foo
  ...

Players = new Meteor.Collection 'players'

doThat = -> ...

_.extend(this, {Foo, Players, doThat})
或者,如果愿意,您可以让“foo”模块仅定义一个包含导出值的全局对象
foo

@foo = {Foo, Players, doThat}
现在,使用“foo”模块的模块可以通过全局变量
foo
引用这些值:

class Subfoo extends foo.Foo
  ...
或者,如果您希望在仅导出
Foo
时也能只键入
Foo
,则可以在顶部展开
Foo

{Foo, Players, doThat} = foo

class Subfoo extends Foo
  ...

在尝试实现您的解决方案时,我刚刚意识到'foo.coffee'嵌套在我的目录结构中的错误位置,因此'foo'类在'subfo.coffee'中不可见,因为Meteor的加载顺序规则。将“foo.coffee”移动到更合适的目录后,使用“class@foo”和“class@subfo extensed foo”可以工作[注意:此注释中在“@”之后插入空格以避免提及]。然而,我仍然有点担心必须编辑我所有的应用程序类,并在类名的前面加上“@”,但现在我还是要接受它!谢谢,这很有趣。我不知道那是有效的咖啡脚本。还有一个没有在文档中详细说明的小贴士……在我使用js2coffee.org之前,我也不知道这是有效的咖啡脚本。我对问题进行了相应的编辑,删除了我自己的(错误和误导性的)建议。我建议编辑您的答案,同时添加“class@Foo extends subfo”解决方案!是的,我刚刚重写了整个答案。希望其他人现在可以快速找到他们需要的信息。请注意,当您设置
@Players
时,您仍然应该将其称为其他地方的玩家。(因为
@Players
在其他功能中无法深入工作,等等)