代码:
Template.chapterForm.rendered = ->
Meteor.startup ->
currentChapter = Chapters.findOne(
_id: "Wdyxj8pWg2HPzuDuf"
)
console.log currentChapter
console.log currentChapter.content
我得到以下输出:
未定义
Tracker afterFlush的例外情况 function:无法读取未定义TypeError的属性'content':
无法读取未定义的属性“内容”
我很困惑。这是CoffeScript错误还是Meteor / mongodb错误?
(我尝试将代码移到文件的顶部。仍然未定义)
修改
奇怪,如果我这样做
Chapters.findOne({_id: "Wdyxj8pWg2HPzuDuf"});
在控制台中我得到了对象:
Object
答案 0 :(得分:2)
以下两个表达式在coffeescript中完全相同
Chapters.findOne( _id:“Wdyxj8pWg2HPzuDuf” )
Chapters.findOne({_ id:“Wdyxj8pWg2HPzuDuf”})
我不知道你为什么使用'Meteor.startup - >'在模板实例中,这不是好方法。在Meteor docs中,“在客户端上,该函数将在DOM准备就绪后立即运行。”因此,在创建或呈现屏幕后立即运行findOne操作。我认为它可能会毁掉Template实例的生命周期顺序,所以只需使用'created'和'rendered'循环。
此外,从#2开始,在生命周期中,您应该在获取它之前订阅该集合(findOne),某处父模板或路由器代码。
所以结论是你的浏览器mini-mongo似乎没有数据。 这意味着您需要使用'Chapters.find()。fetch()'命令检查浏览器控制台,然后如果您可以在控制台上看到数据但仍然存在相同的错误,则应检查生命周期订阅清楚。