Javascript 流星和咖啡脚本

Javascript 流星和咖啡脚本,javascript,coffeescript,meteor,Javascript,Coffeescript,Meteor,我有/clients/client.js、/server/server.js和/model.js 在model.js中,我有:“Lists=newmeteor.Collection(“Lists”); 在客户机/服务器中,我使用了这个集合。一切正常 添加coffeescript后,我将所有js(3)文件转换为.coffee.Remove js文件 启动流星,但现在我有: 未捕获引用错误:未定义列表 为什么?错误在哪里 列表=新流星。集合“列表” 感谢使用coffeescript,如果您想访问另一

我有/clients/client.js、/server/server.js和/model.js

在model.js中,我有:“Lists=newmeteor.Collection(“Lists”); 在客户机/服务器中,我使用了这个集合。一切正常

添加coffeescript后,我将所有js(3)文件转换为.coffee.Remove js文件 启动流星,但现在我有:

未捕获引用错误:未定义列表

为什么?错误在哪里

列表=新流星。集合“列表”


感谢使用coffeescript,如果您想访问另一个文件中的变量/函数,您需要公开您的变量

来自流星博士

全局变量可以在CoffeeScript中使用它(或CoffeeScript的@shorthand)进行设置,因为在顶层,它指的是全局名称空间(客户机上的窗口和服务器上的全局)

@myFunction=->123 在顶层设置全局变量myFunction

因此,全球化您的列表:

@Lists = new Meteor.Collection "lists";

这样,您的其他文件就可以访问
model.js
中的文件(它变成了全局文件)

请参阅如何使用
@
作为从Meteor环境中的CoffeeScript中定义全局变量的便捷方法。正如@Akshat在评论中提到的,Meteor将
设置为全局环境的顶层,以简化此操作。

这只是猜测,但在JavaScript版本中,您是否缺少
var
是故意的吗?如果不是,CoffeeScript将自动将其放入,并包装作用域,因此以前是全局的将不再是。是的@phenomnomnominal应该是对的,如果您想从其他文件访问它们,您需要在CoffeeScript中的变量前面使用
@
,不太确定@Akshat is on about,@在变量前面添加
这个。
如果你想使变量成为全局变量,你通常会做类似
root=this?导出
然后
root.Lists=Lists
@Akshat,
这个
是一个JavaScript概念,
@
只是一个咖啡脚本的缩写。
这定义了调用函数的上下文。在我上面的示例中,使用
.call
,传递到
.call
的第一个参数在被调用函数中变成
this
。除非Meteor做了一些改变CoffeeScript和JavaScript语法的古怪事情,否则您不能只做
@
的笼统语句>将始终是全局对象。@Phenomnominal我明白你的意思,在meteor文档中使用
@
是推荐的方法&当在IRC和google group上引入范围界定时,meteor中的讨论就是这样,因此我提到了它。当然,它并不总是保证全球化的范围,但在这个问题的上下文中,它是这样的通过以下途径解决问题:
@Lists=new Meteor.Collection“list”
这仍然是推荐的方法吗?我注意到提供的链接中的文档不再提到使用
@