首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor Helpers - DOM操作

Meteor Helpers - DOM操作
EN

Stack Overflow用户
提问于 2017-02-14 01:43:25
回答 1查看 127关注 0票数 0
代码语言:javascript
复制
// 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的反应性,还是我没有看到一个小错误。提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-02-14 04:21:24

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

也就是说,您应该将helper看作只提供数据的东西,它不应该“做任何事情”。在模板呈现和处理反应式数据时,帮助器可能会以意想不到的方式被多次调用。

我认为您希望在onRendered()方法中启动计时器;该方法在模板显示在屏幕上时调用一次。(有一个相应的方法,当模板从屏幕上移走时会调用,因此可以停止计时器)。

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

最后一部分简单地确保Blaze模板引用了helper。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42210208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档