我怀疑。不确定是否可能并且没有找到关于它的明确答案。
是否可以在服务器变量中添加“观察者”,这样当值发生变化时,我可以更新视图(客户端)?
假设我有一个var counter = 0
和一个Timeout函数,它每分钟更新一次计数器变量。
我想在客户端更新<span>{{counter}}</span>
。我需要在此服务器变量中添加“观察者”并使其被动。
提前致谢!
答案 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