【发布时间】:2015-07-21 02:24:42
【问题描述】:
当用户刷新某个页面时,我想从 mongoDB 数据库中设置一些初始值。
我尝试使用 onRendered 方法,在文档状态中,当它运行的模板插入 DOM 时,该方法将运行。但是,该数据库在该实例中不可用?
当我尝试从函数访问数据库时:
Template.scienceMC.onRendered(function() {
var currentRad = radiationCollection.find().fetch()[0].rad;
}
我收到以下错误消息:
Exception from Tracker afterFlush function:
TypeError: Cannot read property 'rad' of undefined
但是,当我在控制台中运行 radiationCollection.find().fetch()[0].rad; 行时,我可以访问该值吗?
如何确保 mongoDB 的副本可用?
【问题讨论】:
-
你在用 Iron-router 吗?
-
@Billybobbonnet 是的,我添加了路由器包并使用它来将 http 定向到模板。
-
@ArashSaidi 您需要
waitOn您的数据或保护它。我在this post 中详细解释了这些技术。 -
@David Weldon,如果他打算保护他的数据,是否应该将他的查询包装在跟踪器
autorun函数中?因为守卫会避免渲染的错误,但是一旦数据可用,它会重新运行吗? -
是的,这个很难直接回答,因为数据是在
onRendered中读取的,我不知道它是如何使用的。可能autorun是正确的答案,但是在不了解用例的情况下将他引向那个方向可能会有一些缺陷。waitOn是一个简单的答案,但它依赖于 IR,可能是也可能不是正确的用户体验。
标签: mongodb meteor collections