【问题标题】:Meteor updating client whenever a server variable changes每当服务器变量更改时流星更新客户端
【发布时间】:2015-09-24 07:26:26
【问题描述】:

是否可以在 Meteor 应用程序中的服务器变量更改时更新客户端模板?

基于 Meteor 文档和网络搜索,多次讨论的唯一方法是在服务器变量更改时更新客户端是使用集合,然后在服务器变量更改时插入新文档,然后通过发布/订阅客户端可以获得通知,但我想知道是否有任何其他方式可以在服务器变量更改时通知客户端,而无需使用集合方法。感谢您的宝贵时间

【问题讨论】:

  • 您查看过Session 变量吗?他们完全按照您的意愿行事。客户端或服务器上的更改,并且更改通过应用程序传播。
  • @Louis93, Session 仅在客户端可用。 docs.meteor.com/#/full/session
  • 嗯,原来他们只在客户端发布了 1.0。 OP,更多阅读:stackoverflow.com/questions/15397609/meteor-session-replacement
  • @MChan,我认为通过 Pub/Sub 的集合来实现它可能是唯一的开箱即用方式。还要考虑到这不仅仅是“每当服务器变量更改时”。许多客户端(通常)连接到一台服务器。那么当服务器上的某些东西发生变化时,你想把它推送给所有客户端吗?只有一个特定的客户?一些客户,但不是全部?发布/订阅系统允许对这方面进行精细控制。

标签: meteor


【解决方案1】:

即使您已经写过关于在客户端和服务器之间共享数据的集合,我想您也不喜欢为此使用 mongodb 集合的“默认”结果。

这根本没有必要。假设您有一个服务器端状态对象:

ServerStates = {
  version: "1.0",
  date: "2015-07-07"
}

这应该发送给所有订阅的客户(广播)

server.js

Meteor.publish("server_states", function() {
  // we setup the collection to client just return just on record
  this.insert("server_states", "ServerStates", ServerStates);
  // signal ready
  this.ready();
});

在客户端,您现在可以使用 minimongo 集合来获取这些信息

client.js

ServerStates = new Meteor.Collection("server_states");

Meteor.subscribe("server_states")

如果您更改服务器上某处的值,您可以使用我在meteor - get all subscriber session handles for a publisher method 的回答发布给所有活跃的订阅者。

// publish updated values to all subscribers
function publish_server_state_to_all() {
  _.each(Meteor.server.stream_server.open_sockets, function(connection) {
    _.each(connection._meteorSession._namedSubs, function(sub) {
      if (sub._name == "server_state") {
        sub.changed("server_state", "ServerState", ServerState);
      }
    })
  });
}

因此,如果您在服务器端更改 ServerState 的值,您可以通过

ServerState.version = "1.1"

publish_server_state_to_all()

希望符合您的想法 汤姆

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-10-13
  • 2014-11-25
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多