MeteorJS - 监视服务器变量更改并更新模板值

时间:2015-01-20 22:38:18

标签: meteor reactive-programming

我怀疑。不确定是否可能并且没有找到关于它的明确答案。

是否可以在服务器变量中添加“观察者”,这样当值发生变化时,我可以更新视图(客户端)?

假设我有一个var counter = 0和一个Timeout函数,它每分钟更新一次计数器变量。

我想在客户端更新<span>{{counter}}</span>。我需要在此服务器变量中添加“观察者”并使其被动。

提前致谢!

2 个答案:

答案 0 :(得分:6)

执行此操作的正确方法是在集合中创建集合并存储该变量(即使这意味着您拥有包含一个文档的集合)。

在服务器/客户端公共代码上:

Counter = new Mongo.Collection("counter");

在客户端做一个帮手:

Template.myTemplate.helpers({
  counter: function () {
    return Counter.findOne();
  }
});

在服务器上确保有一个计数器:

if (Counter.find().count() === 0) {
  Counter.insert({value: 0});
}

然后,在服务器上递增计数器:

Counter.update({}, {$inc: {value: 1}});

如果要跟踪多个计数器,可以使用类似的方法 - 只需在集合中插入多个计数器,然后通过_id字段引用它们。

答案 1 :(得分:2)

如果您的var counter = 0是服务器端代码,则不会向客户端发送。 要推送到客户端的任何服务器端数据都应位于Meteor Collection中。然后使用典型的发布和订阅将更新发送给客户端。

如果您使counter成为会话变量,即Session.set('counter', counter++),那么它只会存在于客户端。不同的客户端的同步值不会为counter