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

2019-05-10 09:56发布

我有一个发布功能如下:

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

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

现在假设在某个时候更改了项目取得与上述结果Projects.findOne返回不同的项目,所以Tasks.find将返回其他任务。 然而到项目中所做的更改不会重新发布任务

我用reactivePublish,但事实证明,包装有问题(还没有任何单元测试)。 那么,有没有一种简单的方法,使这个发布功能重新发布的项目更改时?

Answer 1:

概观

在撰写本文时,无连接是一个未解决的问题。 对于一个完整的概述,请参阅无加入流星 。

建议

强烈建议不要使用observeChanges直接。 这是令人难以置信很难得到正确,并且易于开发内存泄漏。 如果你不相信我,看这个视频上EventedMind。 它会使你的眼睛流血。

有几个基于包的解决方案,这一问题。 该流星指南建议发布复合 。

如果您发现使用基于包的解决方案是不可接受的想法,有在连接上的客户端部分从近看无加入流星 。 这是干净的,但需要对用户的部分更多的等待。 另见我的帖子模板加入 ,如果你喜欢活跃的订阅在模板级别。



Answer 2:

还有就是块一个新的孩子了。 一个完整的服务器侧无功发布的解决方案。 (声明:我是作者之一),它的目的是让你可以正常使用,你会与预期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会的项目文件改变任何领域重新运行每次。 你不希望出现这种情况。



文章来源: Meteor.publish: publish collection which depends on other collection