更改所有客户端的 Meteor 收藏订阅

Posted

技术标签:

【中文标题】更改所有客户端的 Meteor 收藏订阅【英文标题】:Changing a Meteor collection subscription for all clients 【发布时间】:2015-10-15 08:53:04 【问题描述】:

我正在开发一个 web 应用程序,其中我需要一个与 admin 关联的客户端来触发一个事件(例如,在下拉列表中选择一个新值),这反过来会告诉所有其他连接的客户端更改订阅,可能使用参数,即新选择的值。

类似

Template.bid.events
  "change .roles": (e, tpl) ->
    e.preventDefault()
    role = tpl.$("select[name='role']").val()
    Meteor.subscribe role

当然,这仅适用于当前客户。 我认为的一种方法是保留一个单独的集合,该集合指向要使用的当前集合,因此客户端可以以编程方式对其进行操作。感觉很麻烦,你。

有没有 Meteor 方法来实现这一点? 谢谢

【问题讨论】:

【参考方案1】:

在meteor中,每当您遇到类似“我需要跨客户端同步数据”的问题时,您都应该使用集合。我意识到仅仅发送一条数据似乎有点过头了,但我向你保证,这是目前阻力最小的路径。

有一些方法可以公开伪集合,这些伪集合实际上并不写入 mongo,但对于您的用例来说,这听起来确实有点矫枉过正 - new Mongo.Collection 是要走的路。

【讨论】:

【参考方案2】:

您可以使用流在连接的客户端和服务器之间建立一条简单的通信线路。它不在 MongoDB 中存储数据。只需让所有连接的客户端侦听流并在带有订阅名称的新消息进入时切换订阅。确保只有与管理员关联的客户端才能将消息推送到流中。

可用包:https://atmospherejs.com/lepozepo/streams

示例:http://arunoda.github.io/meteor-streams/

【讨论】:

以上是关于更改所有客户端的 Meteor 收藏订阅的主要内容,如果未能解决你的问题,请参考以下文章

Meteor 集合获取返回空数组但已订阅

Meteor 发布/订阅独特客户端集合的策略

客户端订阅未从 Meteor 服务器发布接收数据

您如何在 Meteor 中存储特定于客户端的数据服务器端?

MeteorJS - 如何防止匿名客户端订阅集合?

Meteor - 成功登录服务器端后返回客户端