我正处于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:router
和waitOn
?
FIX:
如@Jankapunkt所示,我忘记将集合添加到服务器端启动中。
答案 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
程序包,则需要在服务器端添加发布,在客户端添加订阅。
更多读数: