【问题标题】:Meteor Helpers - DOM ManipulationMeteor Helpers - DOM 操作
【发布时间】:2017-02-14 04:21:24
【问题描述】:
// 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 秒为增量记录时间。助手版本在 DOM 中显示“00:00:00”,但不会增加,如果我控制台记录助手中的时间,它会每秒记录“00:00:00”。

我不确定我是否误解了助手的反应性质,或者我没有看到一个小错误。提前致谢!

【问题讨论】:

    标签: javascript meteor meteor-blaze


    【解决方案1】:

    帮助器旨在为 Blaze 模板提供数据;除非从模板调用,否则它不会被调用。

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

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

    一旦你的定时器启动,你可以将定时器数据写入一个反应变量,然后是一个返回该定时器数据的格式化版本的助手。因为它位于响应式变量中,这将确保每次计时器滴答时都会重新调用您的助手。

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

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 2015-06-07
      • 1970-01-01
      • 2014-05-12
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多