我有一个发布功能,如下所示:
Meteor.publish('tasks', function (name) { var project = Projects.findOne({name: name}); return Tasks.find({projectId: project._id}); });
现在假设在某些时候对Projects进行了更改,结果是上面Projects.findOne返回了一个不同的项目,因此Tasks.find将返回其他任务。但是,对项目所做的更改不会重新发布 任务
Projects.findOne
我已经使用了reactPublish,但事实证明该程序包存在问题(并且也没有任何单元测试)。因此,是否有一种简单的方法可以在项目更改时重新发布此发布功能?
通过调用安装软件包meteor add peerlibrary:reactive-publish。
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每次项目文档的任何字段更改时都会重新运行。你不希望出现这种情况。
_id
autorun