Meteor Collection 存在于 Mongo 但浏览器控制台中存在 returns ReferenceError

Meteor Collection exists in Mongo but returns ReferenceError in browser console

我正在建立一个新的 Meteor 项目,但在处理客户端的集合时遇到了问题。现在我正在构建的是一个管理页面,用户可以在其中维护学校列表。

运行 meteor mongodb.schools.find() 在终端 returns 中的 BSON 对象正如我所期望的,但是当我在 Chrome console it returns Uncaught ReferenceError: Schools is not defined 真可惜。

我的项目架构(简化为引用 School 集合的部分)如下:

client/
  layouts/
    admin/
      schools.coffee
      schools.jade
  lib/
    subscriptions.coffee
lib/
  collections.coffee
server/
  lib/
    publications.coffee

每个文件的内容(按理想的加载顺序)是:

1) lib/collections.咖啡

 1| Schools = new Mongo.Collection('schools')

2) server/lib/publications.咖啡

 1| Meteor.publish('schools'), ->
 2|   Schools.find()

3) client/lib/subscriptions.咖啡

 1| Meteor.subscribe('schools')

4) client/layouts/admin/schools.咖啡

76| Template.admin_schools.helpers
77|   schools: ->
78|     Schools.find()
79|   numSchools: ->
80|     Schools.find().count()
81|   hasSchools: ->
82|     Schools.find().count() > 0

5) client/layouts/admin/schools.玉

 4| h2.admin__header Schools
 5|   span.admin__record-count {{numSchools}} entries
...
22| table.admin__list
23|   if hasSchools
24|     each schools
25|       tr.admin__list-item
26|         td #{name}

我也有一个调用 Schools.insert 的新集合条目的表格,但那里的错误是一样的。

当页面加载时,出现以下错误(可能是因为它先被调用):

debug.js:41 Exception in template helper: ReferenceError: Schools is not defined
at Object.Template.admin_schools.helpers.numSchools

这两个错误,加上我知道集合中存在一个条目的事实,使我相信问题出在客户端对集合存在的认识上。

这种差异可能是由于加载顺序造成的(我很确定我是通过将重要文件放在 lib/ 目录中来解决这个问题的,尽管我希望得到第二个意见),或者可能是由于spelling/syntax 错误(尽管没有编译错误令人费解)。也许完全不同!

非常感谢您的时间和帮助,非常感谢。

您是否检查过您创建的订阅?

原来因为是CoffeeScript,在lib/collections.coffee中的Schools = new Mongo.Collection('schools')前加上一个@,使得Schools成为全局变量,从而解决了问题!最后的修复非常简单 :)

特别感谢 Kishor 帮助解决问题。