MeteorJS - 观察服务器变量变化并更新模板值
MeteorJS - Watch for server variable change and update the template value
我有疑问。不确定是否可行,也没有找到明确的答案。
是否可以将 "watcher" 添加到服务器变量以便在值更改时更新视图(客户端)?
假设我有一个 var counter = 0
和一个每分钟更新计数器变量的超时函数。
我想在客户端更新一个<span>{{counter}}</span>
。我需要向此服务器变量添加一个 "watcher" 并使其 反应。
提前致谢!
如果您的 var counter = 0
是服务器端代码,它不会发送给客户端。
任何你想推送给客户端的服务器端数据都应该在 Meteor Collection 中。然后使用典型的发布和订阅向客户端发送更新。
如果您将counter
设为会话变量,即Session.set('counter', counter++)
,那么它将只存在于客户端。不同的客户端不会有counter
的同步值
执行此操作的正确方法是创建一个集合并将该变量存储在集合中(即使这意味着您有一个包含一个文档的集合)。
上server/client常用代码:
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
字段引用它们。
我有疑问。不确定是否可行,也没有找到明确的答案。
是否可以将 "watcher" 添加到服务器变量以便在值更改时更新视图(客户端)?
假设我有一个 var counter = 0
和一个每分钟更新计数器变量的超时函数。
我想在客户端更新一个<span>{{counter}}</span>
。我需要向此服务器变量添加一个 "watcher" 并使其 反应。
提前致谢!
如果您的 var counter = 0
是服务器端代码,它不会发送给客户端。
任何你想推送给客户端的服务器端数据都应该在 Meteor Collection 中。然后使用典型的发布和订阅向客户端发送更新。
如果您将counter
设为会话变量,即Session.set('counter', counter++)
,那么它将只存在于客户端。不同的客户端不会有counter
执行此操作的正确方法是创建一个集合并将该变量存储在集合中(即使这意味着您有一个包含一个文档的集合)。
上server/client常用代码:
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
字段引用它们。