【问题标题】:How do I make a subscription update when another collection, not returned by the publish function, changes?当发布函数未返回的另一个集合发生更改时,如何进行订阅更新?
【发布时间】:2013-03-22 11:51:20
【问题描述】:

我已经从缔约方示例中改编了 server.js。

我希望它只发布以下用户,而不是让“目录”发布所有用户:

  • 拥有当前用户受邀参加的派对
  • 被邀请参加当前用户被邀请参加的派对
  • 被邀请加入当前用户拥有的派对

请看这里:https://github.com/dimfisch/meteor-dependency/blob/master/parties/server/server.js

问题在于,当当前用户邀请新用户(新用户是指他们之前没有与派对相关的意义上)或被新用户邀请时,“目录”订阅不会更新,因为反应性在返回的光标上,在这些情况下不会改变。

以下是重现这种情况的步骤:

  1. 打开两个不同的客户,比如 Joe 和 Kate
  2. Joe 创建了一个新的私人派对并邀请了 Kate
  3. Kate 看到了那个新派对,但在 Meteor.users 中没有得到任何关于 Joe 的信息
  4. 我想让 Joe 出现在 Kate 的客户中

所以问题是,如何实现? 一种可能的方法是在“目录”发布函数中使“各方”光标观察更改。但我不确定这是否真的有效,我想知道是否有更直接的解决方案。

【问题讨论】:

  • repro 不起作用... Joe 无法邀请 Kate,因为未发布完整的用户列表。也许用命令更新以在控制台中运行?
  • @alanning 是的,这是真的。我的应用程序基于派对示例,我添加了很多代码让用户能够使用电子邮件地址邀请其他人参加派对,但这不在派对示例中......所以这就是我所做的:我创建两个用户,joe@example.com 和 kate@example.com。他们两个的密码都是“示例”。我为 Joe 创建了一个名为“Test Party 1”的派对。我通过在控制台中输入以下内容来邀请 Kate: Meteor.call("invite", Session.get("selected"), "Ld96cayfGZrzSLLn2") 最后一部分是 Kate 的 userId。 [消息太长,下一条评论跟进]
  • 它有效,但在 Kate 的控制台上执行 Meteor.users.find().fetch() 仍然显示一个对象,即她自己。对乔来说没什么。当然,如果您刷新页面,它就会显示出来,但这不是您想要的行为。

标签: meteor


【解决方案1】:

您似乎可以在客户端使用 observeChanges。每当parties 集合发生变化时,停止并重新启动users 订阅,这会强制发布功能重新运行。

parties 发布功能只会发送当前用户有权访问的参与方信息。并且users 发布功能将为有权访问同一方的任何用户发送适当的用户信息。

服务器端,您可能可以做同样的事情,但它会做更多的工作... 发布parties 正常但手动发布仅users 与用户共享方。不确定删除案例如何工作。似乎这会很痛苦,而且可能效率不高。

【讨论】:

  • 我必须在什么上运行 ObserveChanges?我认为 Meteor.subscribe("directory") 不会返回光标。
猜你喜欢
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多