【发布时间】:2013-04-12 16:38:04
【问题描述】:
我有 /clients/client.js 、 /server/server.js 和 /model.js
在 model.js 中我有:“Lists = new Meteor.Collection("lists"); 在客户端/服务器中,我使用了这个集合。一切正常。
添加咖啡脚本后。我已将所有 js (3) 文件转换为 .coffee。删除 js 文件 并启动流星。但现在我得到了:
未捕获的引用错误:未定义列表
为什么?哪里出错了?
Lists = 新 Meteor.Collection “列表”
谢谢
【问题讨论】:
-
这只是一个猜测,但在 JavaScript 版本中,您是否故意遗漏了
var?如果没有,CoffeeScript 会自动将其放入,并包装范围,因此以前的全局变量将不再存在。 -
是的@phenomnomnominal 应该是正确的,如果你想从其他文件访问它们,你需要在coffeescript 中的变量前面使用
@ -
不太清楚@Akshat 是关于什么的,@ 在变量前面添加了
this.。如果你想让一个变量全局化,你通常会做类似root = this ? exports然后root.Lists = Lists。 -
@Akshat,
this是一个 JavaScript 概念,@只是它的 CoffeeScript 简写。this定义调用函数的上下文。在上面的示例中,使用.call,传递给.call的第一个参数在被调用函数中变为this。除非 Meteor 做了一些新奇的事情来改变 CoffeeScript 和 JavaScript 语法,否则你不能只是笼统地声明@将永远是全局对象。 -
@phenomnomnominal 我明白你的意思,使用
@是在 IRC 和 google 组上引入范围界定时,在流星文档和流星讨论中推荐的方式,因此我提到它。当然,它并不总是保证全球化范围,但在这个问题的上下文中,它通过以下方式解决了这个问题:@Lists = new Meteor.Collection "lists"
标签: javascript coffeescript meteor