流星集合在模板中为空

时间:2018-06-25 21:21:10

标签: meteor collections

我正处于Meteor项目的早期阶段,目前存在所有默认软件包,包括自动发布。将收藏集Notes添加到我的项目中效果很好,并按预期显示。

当我添加第二个收藏集时。 Tags,复制相同的模式,它始终为空。

所以我需要一些注意事项。我读过David Weldons list of common mistakes,但那里没有任何线索。

有两个显示两个集合的模板,一个显示的很好,另一个显示的不是。

声明的集合完全相同:

export const Tags = new Mongo.Collection('Tags');
export const Notes = new Mongo.Collection('Notes');

它们以相似,简单的模板显示,这些模板在我的html中引用:

<body>
  <div>
    {{#each tags}}
      {{> tag}}
    {{/each}}
  </div>
  <div>
    {{#each notes}}
      {{> note}}
    {{/each}}
  </div>
</body>

模板帮助器也相同:

Template.body.helpers({
  notes() {
    return Notes.find({}, { sort: { createdAt: -1}});
  },
  tags() {
    let t = Tags.find({});
    return t;
  },
});

如果在let t =...之后中断,则t.fetch()给出一个空数组。 (meteor mongo: db.Tags.find() 不是为空...)

tags()-helper返回数组可以正确显示该数据,因此显然Tags-集合中我错过了这一点。

这可能是时间安排吗?我认为助手是被动的,因此应该照顾这类事情。还是我需要研究显式订阅iron:routerwaitOn

FIX:

如@Jankapunkt所示,我忘记将集合添加到服务器端启动中。

1 个答案:

答案 0 :(得分:1)

为了成功将mongo集合的数据自动发布到客户端,您需要将集合都导入到服务器和客户端(最好是在启动时)。

示例

imports / MyCollection.js

export const MyCollection = new Mongo.Collection('mycollection');

server / main.js

import { MyCollection } from '../imports/MyCollection';

client / main.js

import { MyCollection } from '../imports/MyCollection';

但是,如果删除autopublish程序包,则需要在服务器端添加发布,在客户端添加订阅。

更多读数:

https://guide.meteor.com/data-loading.html

https://guide.meteor.com/collections.html