每当服务器变量更改时,Meteor都会更新客户端

时间:2015-07-07 00:27:56

标签: meteor

每当Meteor应用程序中的服务器变量发生变化时,是否可以更新客户端模板?

基于Meteor文档和搜索网络,每当服务器变量发生变化时,多次讨论使客户端更新的唯一方法是使用Collection,然后在Server变量更改时插入新文档,然后通过Publish / Subscribe客户端可以得到通知,但我想知道是否有任何其他方式我可以在服务器变量更改时通知客户端,而无需使用集合方法。谢谢你的时间

1 个答案:

答案 0 :(得分:0)

即使您已经写过关于在客户端和服务器之间共享数据的集合,我想,您不喜欢为此设置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()

希望这符合你的想法 汤姆