Meteor Collection 存在于 Mongo 但浏览器控制台中存在 returns ReferenceError
Meteor Collection exists in Mongo but returns ReferenceError in browser console
我正在建立一个新的 Meteor 项目,但在处理客户端的集合时遇到了问题。现在我正在构建的是一个管理页面,用户可以在其中维护学校列表。
运行 meteor mongo
和 db.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 帮助解决问题。
我正在建立一个新的 Meteor 项目,但在处理客户端的集合时遇到了问题。现在我正在构建的是一个管理页面,用户可以在其中维护学校列表。
运行 meteor mongo
和 db.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 帮助解决问题。