Meteor ReactiveDict MongoDB查找onCreate

时间:2016-11-14 21:15:37

标签: node.js mongodb meteor

我正在尝试使用mongodb查找项目并存储在ReactiveDict中,但我只是收到错误:

{{#each}} currently only accepts arrays, cursors or falsey...

我在这里做错了什么?

Template.body.onCreated(function(){
    Meteor.subscribe('itemFind');
    this.global = new ReactiveDict();
    this.global.set('items',Items.find());
});

Template.body.helpers({
  items(){
  console.log(Template.instance().global.get('items'));
  return Template.instance().global.get('items');
}
});

此外,我想如果我在原始查找语句中添加.fetch(),这将被修复,但显然不是。

我是Meteor的新手,所以我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

onCreated上订阅尚未准备好。一个好的做法是在onCreated上定义您的Reactive vars并在onRendered上分配它们。

在任何情况下,您都需要等待订阅准备就绪。为此,您可以使用autorun()。每次更新依赖关系时,autorun()都会重新运行。

Template.body.onCreated(function() {
  this.global = new ReactiveDict({});
});

Template.body.onRendered(function()
  this.autorun(() => {
  const subs = Meteor.subscribe('itemFind');
    if(subs.ready()) {
      this.global.set('items', Items.find({}));
    }
  });
});