Meteor Collection存在于Mongo中,但在浏览器控制台中返回ReferenceError

时间:2016-02-24 01:42:44

标签: mongodb meteor collections coffeescript referenceerror

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

在终端中运行meteor mongodb.schools.find()会像我期望的那样返回一个BSON对象,但是当我进入"学校"在Chrome控制台中它返回Uncaught ReferenceError: Schools is not defined,这是一个无赖。

我的项目架构(简化为参考学校集合的位)如下:

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

每个文件的内容(按照所需的加载顺序)是:

1) lib / collections.coffee

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

2) server / lib / publications.coffee

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

3) client / lib / subscriptions.coffee

 1| Meteor.subscribe('schools')

4) client / layouts / admin / schools.coffee

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.jade

 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/目录中来解决这个问题,尽管我希望得到第二意见),或者可能是由于拼写/语法错误(虽然没有编译错误令人费解)。也许完全不同的东西!

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

2 个答案:

答案 0 :(得分:1)

事实证明,因为这是CoffeeScript,在@ Schools = new Mongo.Collection('schools')之前放置lib/collections.coffee会使学校成为全局变量,从而解决问题!最后很简单的修复:)

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

答案 1 :(得分:-1)

您是否检查了已创建的订阅?