繁体   English   中英

流星助手-DOM操作

[英]Meteor Helpers - DOM Manipulation

// 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”。

我不确定我是否误解了助手的反应性,还是看不到小错误。 提前致谢!

助手旨在向Blaze模板提供数据; 除非从模板调用,否则不会调用它。

也就是说,您应该将助手视为提供数据的东西,而不应该“做任何事情”。 随着模板的呈现以及响应数据的处理,助手可能会以意想不到的方式被调用多次。

我认为您希望在onRendered()方法中启动计时器; 当模板放到屏幕上时即被调用。 (当模板从屏幕上移开时,有一个相应的方法被调用,因此可以停止计时器)。

计时器启动后,您可以将计时器数据写入反应型变量,然后将辅助程序返回该计时器数据的格式化版本。 因为它在反应式var中,所以可以确保每次计时器计时时都会重新调用您的助手。

最后一部分只是确保Blaze模板引用帮助程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM