2017-02-13 117 views
0
// Works 
var counter = 0; 
    var myInterval = Meteor.setInterval(function(){ 
     counter++; 
     var time = moment().hour(0).minute(0).second(counter).format('HH:mm:ss'); 
     console.log(time); 
    }, 1000); 

// Inside Helper - Does Not Work 

Template.clockRunner.helpers({ 
    start: function() { 
    var counter = 0; 
    var time = moment().hour(0).minute(0).second(counter).format('HH:mm:ss'); 
    var myInterval = Meteor.setInterval(function(){ 
     counter++ 
    }, 1000); 
    return time; 
    }, 
}) 

第一個版本控制檯以1秒爲增量記錄時間。 Helper版本在DOM中顯示「00:00:00」,但不會增加,如果我使用控制檯在輔助程序中記錄時間,它會每秒鐘記錄「00:00:00」。流星助手 - DOM操作

我不確定我是否誤解了助手的反應性質,或者我沒有看到一個小錯誤。提前致謝!

回答

1

助手是爲了向Blaze模板提供數據;它不會被調用,除非從模板調用。

那說的,你應該把幫手當成只有提供的數據,它不應該「做任何事情」。作爲模板呈現,並且在處理被動數據時,可能以意想不到的方式多次調用助手。

我想你想讓你的計時器在onRendered()方法中啓動;當屏幕上放置模板時會調用一次。 (當模板離開屏幕時有一個相應的方法,所以定時器可以停止)。

一旦您的計時器啓動,您可以將計時器數據寫入反應變量,然後返回該計時器數據格式化版本的幫助程序。因爲它處於響應式變量中,這將確保每當計時器滴答時重新調用助手。

最後一部分只是確保Blaze模板引用幫助器。