为了账号安全,请及时绑定邮箱和手机立即绑定

Meteor.publish:发布取决于其他集合的集合

Meteor.publish:发布取决于其他集合的集合

烙印99 2019-07-31 10:13:04
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部分。它很干净,但需要更多用户的等待。如果您希望在模板级别激活订阅,也请参阅我在模板联接上发布的帖子。


查看完整回答
反对 回复 2019-07-31
?
沧海一幻觉

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


查看完整回答
反对 回复 2019-07-31
  • 2 回答
  • 0 关注
  • 508 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信