javascript - 如何使用 meteor 定期更新变量

标签 javascript meteor setinterval

我有一个 session 变量,我想以固定的周期更新它。比如说,我希望这个变量每 60 秒增加 1。

在我看来,执行此操作的最佳位置是在相关模板的助手部分内。我首先尝试使用 setInterval 来执行此操作,如 here 所述,但这没有用(该功能似乎没有重复)。

然后我尝试了我认为是一个简单的解决方案,但这也行不通。见下文。辅助变量“currentPosition”应该返回当天的当前分钟(加上偏移量)。但是,它仅在首次调用模板时以及在“事件”部分定义的函数中更改 session 变量“偏移量”时执行此操作,该函数响应对特定 div 的单击(“下一步”按钮) .

    currentPosition: function () {
        var d = new Date();
        var h = d.getHours();
        var m = d.getMinutes();
        var w = h * 60 + m;

        Session.set("position", w + Session.get("offset"));

        return Session.get("position");
    },

我认为上述助手会每分钟主动更新“currentPosition”的值。然而事实并非如此。

所以,我的问题是,当 session 变量是调整。

(如果有一个直接且完全不同的解决方案适用于 meteor,我不知道它,所以如果我遗漏了一些明显的东西,请向我指出。)

最佳答案

虽然您使用的是 react 变量,但它只会设置一次 - 当第一次调用助手时。因此它不会再次运行。您需要帮助器的外部 函数来为您设置变量。请记住一条重要规则 - 帮助者永远不要拥有side effects .

这是一个关于如何创建计时器的完整工作示例:

html

<body>
  {{> timer}}
</body>

<template name="timer">
  <p>Total Seconds: {{seconds}}</p>
</template>

js

Template.timer.helpers({
  seconds: function() {
    return Template.instance().seconds.get();
  }
});

Template.timer.created = function() {
  var self = this;
  this.seconds = new ReactiveVar(0);

  this.handle = Meteor.setInterval((function() {
    self.seconds.set(self.seconds.get() + 1);
  }), 1000);
};

Template.timer.destroyed = function() {
  Meteor.clearInterval(this.handle);
};

关于javascript - 如何使用 meteor 定期更新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412743/

相关文章:

带有文本框的 Javascript setInterval()

javascript - js 脚本可以获取在同一文件内的 EJS 上下文/页面中写入的变量吗

javascript - 日期值不断返回 NaN

javascript - 在mongodb中同时并按位置递减多个值

javascript - Mongo 中的 Meteor 数据在哪里?

JavascriptclearInterval仅适用于页面上的一个setInterval

javascript - 清除间隔不起作用

javascript - 为什么全局对象的值在变化而不仅仅是局部对象的值在变化?

javascript - 不返回带有在类中编写的此函数的 jsx 组件

javascript - meteor - 铁路由器不等待 onBeforeAction Hook 中的订阅数据