2017-02-13 87 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模板引用帮助器。