在集合中添加回调#observerChanges具有Template.instance()= null

时间:2016-06-18 17:04:36

标签: meteor meteor-blaze

我使用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 = '';
    },
});

1 个答案:

答案 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);
        }
      }
    });
});