Meteor.publish:发布collections取决于其他collections
我有一个发布function如下:
Meteor.publish('tasks', function (name) { var project = Projects.findOne({name: name}); return Tasks.find({projectId: project._id}); });
现在假设在某些情况下对项目进行了更改,导致上面的Projects.findOne
返回一个不同的项目,因此Tasks.find将返回其他任务。 但是对项目所做的更改不会重新发布任务
我使用了reactivePublish,但事实certificate这个包有问题(也没有任何unit testing)。 那么,有没有一种简单的方法可以在项目更改时重新发布这个发布function呢?
概观
在撰写本文时,被动连接是一个未解决的问题。 有关完整的概述,请参阅“ meteor中的react native连接” 。
build议
我强烈build议不要直接使用observeChanges 。 难以想象,很容易发生内存泄漏。 如果你不相信我,请在EventedMind上观看此video 。 这会让你的眼睛stream血。
有几个基于软件包的解决scheme来解决这个问题。 meteor指南推荐发布 – 复合 。
如果您发现使用基于软件包的解决scheme的想法是不可接受的,请仔细查看来自Reactive Joins In In Meteor中的“ join客户端”部分。 这是干净的,但需要更多的等待用户的一部分。 另外,如果您希望在模板级别激活您的订阅,请参阅我在模板连接上的文章。
现在有一个新的孩子。 完整的服务器端被动式发布解决scheme。 (免责声明:我是其中一位作者。)它的devise使您可以像使用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
运行。 你不希望出现这种情况。