小编典典

Meteor.publish:发布依赖于其他集合的集合

javascript

我有一个发布功能,如下所示:

Meteor.publish('tasks', function (name) {
    var project = Projects.findOne({name: name});

    return Tasks.find({projectId: project._id});
});

现在假设在某些时候对Projects进行了更改,结果是上面Projects.findOne返回了一个不同的项目,因此Tasks.find将返回其他任务。但是,对项目所做的更改不会重新发布
任务

我已经使用了reactPublish,但事实证明该程序包存在问题(并且也没有任何单元测试)。因此,是否有一种简单的方法可以在项目更改时重新发布此发布功能?


阅读 346

收藏
2020-05-01

共1个答案

小编典典

通过调用安装软件包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每次项目文档的任何字段更改时都会重新运行。你不希望出现这种情况。

2020-05-01