当用户刷新某个页面时,我想从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的副本可用?
答案 0 :(得分:1)
对我来说最好的方法是在路由器中使用waitOn功能。感谢@David Weldon提示。
immutable
答案 1 :(得分:0)
你需要设置一个正确的出版物(好像你做了)并订阅路线参数。如果您想确保在#include <stdio.h>
int main() {
int i, numberOfNumbs=0,total=0,value, valsRead;
float average;
valsRead = scanf("%d",&value);
while(valsRead>0)
{
numberOfNumbs++;
total +=value;
printf("Read %d\n", value);
valsRead = scanf("%d",&value);
}
average=(float)total/(float)numberOfNumbs;
printf("You read %d values. Average = %f.",numberOfNumbs, average);
return (0);
}
函数中有效地拥有数据,则需要添加额外的步骤。
以下是如何在路线定义中制作它的示例:
onRendered
在此示例中,您可以使用this.templateController = RouteController.extend({
template: "YourTemplate",
action: function() {
if(this.isReady()) { this.render(); } else { this.render("yourTemplate"); this.render("loading");}
/*ACTION_FUNCTION*/
},
isReady: function() {
var subs = [
Meteor.subscribe("yoursubscription1"),
Meteor.subscribe("yoursubscription2")
];
var ready = true;
_.each(subs, function(sub) {
if(!sub.ready())
ready = false;
});
return ready;
},
data: function() {
return {
params: this.params || {}, //if you have params
yourData: radiationCollection.find()
};
}
});
或onRendered
this.data.yourData
函数中获取数据
编辑:正如@David Weldon在评论中所述,您还可以使用更简单的替代方案:waitOn
答案 2 :(得分:0)
我无法看到您的收藏品,因此我无法保证 rad 是您收藏中的钥匙,也就是说我相信您的问题是您的收藏品尚无法使用。正如@David Weldon所说,你需要保护或等待你的订阅可用(记住它必须加载)。
我在铁路上做的是:
data:function(){
var currentRad = radiationCollection.find().fetch()[0].rad;
if (typeof currentRad != 'undefined') {
// if typeof currentRad is not undefined
return currentRad;
}
}