我使用event observerChanges
在mongodb集合上设置监听器我希望它将新条目推送到ReactiveVar
,以便动态地在模板中使用。
如果我通过提交表单来插入数据,那么它可以正常工作...... Template.instance()
是Blaza.Template
的一个实例。
但是,如果我手动在mongodb中插入记录,Template.instance()
将变为空
你能帮忙解释为什么我不能在这个不同的事件中访问模板吗?
非常感谢你。
cursor.observeChanges({
added: function(id, doc) {
if (usersLoaded) {
task = Template.instance().curTasks.get();
task.push({id: id, text:id});
Template.instance().curTasks.set(task);
}
}
});
Template.body.onCreated(function bodyOnCreated() {
this.curTasks = new ReactiveVar([]);
});
Template.body.helpers({
tasks: function() {
return Template.instance().curTasks.get();
}
});
Template.body.events({
'submit .new-task'(event) {
// Prevent default browser form submit
event.preventDefault();
// Get value from form element
const target = event.target;
const text = target.text.value;
// Insert a task into the collection
Tasks.insert({
text,
createdAt: new Date(), // current time
});
// Clear form
target.text.value = '';
},
});
答案 0 :(得分:0)
当观察者根据数据库更改触发时,根本没有模板上下文 - 您的观察者是在模板之外定义的。尝试将观察者移动到.onCreated
代码中,以便定义Template.instance
Template.body.onCreated(function bodyOnCreated() {
this.curTasks = new ReactiveVar([]);
cursor.observeChanges({
added: function(id, doc) {
if (usersLoaded) {
task = Template.instance().curTasks.get();
task.push({id: id, text:id});
Template.instance().curTasks.set(task);
}
}
});
});