【问题标题】:MeteorJS and CoffeescriptMeteorJS 和 Coffeescript
【发布时间】: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


【解决方案1】:

请参阅http://docs.meteor.com/#coffeescript,了解如何使用@ 作为在 Meteor 环境中从 CoffeeScript 定义全局变量的便捷方式。正如 @Akshat 在 cmets 中提到的那样,Meteor 将 this 设置为全局环境的顶层以简化此操作。

【讨论】:

  • 这仍然是推荐的方法吗?我注意到提供的链接中的文档不再提及使用@
【解决方案2】:

使用coffeescript,如果你想在另一个文件中访问你的变量/函数,你需要暴露你的变量

来自流星文档

全局变量可以使用 this(或 CoffeeScript 的 @ 简写)在 CoffeeScript 中设置,因为在顶层 this 指的是全局命名空间(客户端上的窗口和服务器上的全局)。因此

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

所以全球化你的列表:

@Lists = new Meteor.Collection "lists";

这样model.js 中的这个可以被你的其他文件访问(它变成全局的)

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 2014-08-22
    • 2012-10-20
    • 2015-02-28
    • 2017-02-02
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多