2015-12-31 100 views
0

在我的模板,我有以下的數據庫代碼更新多個模板meteorjs

{{#each cards}} 
    ... 
      <h4>Time left {{timeLeft validUntil}}</h4> 
       <div class="clearfix"></div> 
    .... 
{{/each}} 

我有一個例子卡這樣

{groupId: groupId, posted: new Date(),validUntil:moment().add(24,'h').toDate()}); 

模板幫手

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到數據庫中,但感覺就像垃圾有它在數據庫中時,我已經創建並validUntil已經存在。

如何從每5秒調用一次的函數更新所有卡內的時間左移?

我試圖尋找到解決方法是這樣的:https://github.com/meteor/meteor/issues/1172

但是,這感覺就像一個可怕的黑客

回答

0

您鏈接的解決方案是不是一個真正的黑客,但完全相同的方式流星工作(雖然你不應該在這種情況下使用Session)。您不需要明確地重新渲染模板,而是指定依賴關係,使依賴計算無效,並讓Meteor和Blaze負責渲染。

在您的例子,你可以創建一個Tracker.Dependency這樣的:

var timerDep = new Tracker.Dependency; 

助手必須依靠timerDep

timeLeft: function() { 
    timerDep.depend(); 
    … 
} 

最後,你無效助手的計算每五秒鐘:

function updateTimers() { 
    timerDep.changed(); 
} 

這樣,你的幫手將是r當validUntil發生變化或計時器到期時,