我正在设置一个新的Meteor项目,但在客户端使用集合时遇到问题。现在,我建立的是一个管理页面,用户可以在其中维护学校列表。
在终端中运行meteor mongo
和db.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/
目录中来解决这个问题,尽管我希望得到第二意见),或者可能是由于拼写/语法错误(虽然没有编译错误令人费解)。也许完全不同的东西!
非常感谢您的时间和帮助,非常感谢。
答案 0 :(得分:1)
事实证明,因为这是CoffeeScript,在@
Schools = new Mongo.Collection('schools')
之前放置lib/collections.coffee
会使学校成为全局变量,从而解决问题!最后很简单的修复:)
特别感谢Kishor帮助解决问题。
答案 1 :(得分:-1)
您是否检查了已创建的订阅?