Meteor 更新多个模板
在我的模板中,我有以下代码Meteor 更新多个模板,meteor,Meteor,在我的模板中,我有以下代码 {{#each cards}} ... <h4>Time left {{timeLeft validUntil}}</h4> <div class="clearfix"></div> .... {{/each}} 模板辅助程序 Template.groupDetails.helpers({ timeLeft: function(validUntil){
{{#each cards}}
...
<h4>Time left {{timeLeft validUntil}}</h4>
<div class="clearfix"></div>
....
{{/each}}
模板辅助程序
Template.groupDetails.helpers({
timeLeft: function(validUntil){
var diff = moment.duration(moment().diff(validUntil));
return [diff.hours()*-1, diff.minutes()*-1, diff.seconds()*-1].join(':')
}
});
然后,我创建了一个setIntervall,它使用模板上创建的事件
Template.groupDetails.created = function() {
Meteor.setInterval( updateTimers, 5000 );
};
我有函数updateTimers:
function updateTimers() { };
我已经测试了很多东西,比如在数据库中添加一个timeLeft int,但是当我已经创建了一个timeLeft int并且在那里有效时,将它放在数据库中感觉像是浪费
如何通过每5秒调用一次的函数更新所有卡中的timeleft
我尝试过这样的解决方法:
但是这感觉像是一个可怕的黑客您链接的解决方案不是真正的黑客,而是Meteor的工作方式(尽管在这种情况下您不应该使用
会话
)。您可以指定依赖项,使依赖计算无效,并让Meteor和Blaze负责渲染,而不是显式地重新渲染模板
在您的示例中,您可以创建如下的
var timerDep = new Tracker.Dependency;
助手必须依赖于timerDep
:
timeLeft: function() {
timerDep.depend();
…
}
最后,每五秒钟使辅助对象的计算无效:
function updateTimers() {
timerDep.changed();
}
这样,您的助手将在validUntil
更改或计时器过期时重新运行
function updateTimers() {
timerDep.changed();
}