Meteor.publish:发布取决于其他集合的集合我有一个发布功能如下:Meteor.publish('tasks', function (name) {
var project = Projects.findOne({name: name});
return Tasks.find({projectId: project._id});});现在假设在某些时候对Projects进行了更改,结果是上面的内容Projects.findOne返回一个不同的项目,因此Tasks.find将返回其他任务。但是,对项目所做的更改不会重新发布任务我已经使用了reactivePublish,但事实证明包有问题(并且没有任何单元测试)。那么,是否有一种简单的方法可以在项目更改时重新发布此发布功能?
2 回答
波斯汪
TA贡献1811条经验 获得超4个赞
概观
在撰写本文时,反应性连接是一个未解决的问题。有关完整概述,请参阅Meteor中的Reactive Joins。
建议
我强烈建议不要直接使用observeChanges。要做到这一点非常困难,并且很容易产生内存泄漏。如果您不相信我,请在EventedMind上观看此视频。它会让你的眼睛流血。
有几个基于包的解决方案来解决这个问题。该流星指南建议发布复合。
如果您发现使用基于包的解决方案的想法是不可接受的,请仔细查看Reactive Joins In Meteor中的Joining On The Client部分。它很干净,但需要更多用户的等待。如果您希望在模板级别激活订阅,也请参阅我在模板联接上发布的帖子。
沧海一幻觉
TA贡献1824条经验 获得超5个赞
现在街区有一个新的孩子。完整的服务器端响应式发布解决方案。(免责声明:我是作者之一。)它的设计使您可以像平常一样正常使用它autorun
。它会自动处理所有事情。
通过调用安装包meteor add peerlibrary:reactive-publish
。
添加包后,您可以简单地执行以下操作:
Meteor.publish('tasks', function (name) { this.autorun(function (computation) { var project = Projects.findOne({name: name}, {fields: {_id: 1}}); return Tasks.find({projectId: project._id}); });});
正如您所期望的那样。:-)
重要的是将第一个查询中的字段限制为_id
,否则autorun
每次项目文档的任何字段更改时都会重新运行。你不希望出现这种情况。
添加回答
举报
0/150
提交
取消