// 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“,但不会递增,如果我在helper中控制台记录时间,它每秒都会记录"00:00:00”。
我不确定我是误解了helper的反应性,还是我没有看到一个小错误。提前感谢!
发布于 2017-02-14 04:21:24
帮助器旨在为Blaze模板提供数据;除非从模板中调用,否则不会调用它。
也就是说,您应该将helper看作只提供数据的东西,它不应该“做任何事情”。在模板呈现和处理反应式数据时,帮助器可能会以意想不到的方式被多次调用。
我认为您希望在onRendered()方法中启动计时器;该方法在模板显示在屏幕上时调用一次。(有一个相应的方法,当模板从屏幕上移走时会调用,因此可以停止计时器)。
启动计时器后,您可以将计时器数据写入反应变量,然后将其写入返回该计时器数据的格式化版本的帮助器。因为它是反应式变量,这将确保每次计时器滴答作响时都会重新调用您的助手。
最后一部分简单地确保Blaze模板引用了helper。
https://stackoverflow.com/questions/42210208
复制相似问题