Meteor - onCreated集合查找

时间:2015-11-15 08:34:17

标签: meteor

我在这里难过。我无法通过onCreated方法找到它的集合。如果我在调用之前记录data.source_id,然后在控制台中执行相同的查找,则会找到它。关于onCreated或其他什么东西有什么特别之处吗?我只是做错了吗?

的客户机/ setup.js

Meteor.subscribe('source_elements');
Meteor.subscribe('internal_elements');

的客户机/ submit.js

Router.route('/element/submit', function() {
    this.render('submit', {
        data: {
            source_id: this.params.query.source_id,
        },
    });
});


Template.submit.onCreated(function() {
    var data = Template.instance().data;
    var source_element = SourceElements.findOne({'_id': data.source_id});

    console.log(source_element); // EMPTY!!
});


Template.submit.helpers({
    element: function() {
        var data = Template.instance().data;
        var source_element = SourceElements.findOne({'_id': data.source_id});

        console.log(source_element); // RESULT!!

        return source_element;
    },
});

1 个答案:

答案 0 :(得分:1)

订阅是异步的。看起来您在数据到达客户端之前创建了模板。当您在控制台中执行find时,客户端已收到数据。

onCreated函数中,您可以使用Tracker.autorun指定在SourceElements集合更改时重新运行的函数(这是所有模板帮助程序在幕后执行的操作):< / p>

Tracker.autorun(function() {
  var element = SourceElements.findOne({'_id': data.source_id});
  console.log(element);
});

将立即调用此函数。此时,findOne可能会返回undefined,因为订阅尚未准备好。数据到达后,将再次调用该函数,您可以处理返回的元素。