3

我想用 Meteor.setInterval 命令更新我的时间函数。

这就是我的 *.js 文件的样子:

function uhrzeit() {
  var zeit = new Date();
  var std = zeit.getHours();
  var min = zeit.getMinutes();
  return std + ":" + min;
};

if (Meteor.isClient) {
  Template.uhr.zeit = function() {
    Meteor.setInterval(uhrzeit, 1000); //Edit: Changed it to pass, not call the function.
    return uhrzeit();
  };
}

模板未更新。它会在我更新页面后显示实际时间,但不会定期更新。或者至少我没有改变 HTML 中的时间。

4

3 回答 3

11

您的功能不是反应性的。你需要建立一个依赖,确保你的数据函数依赖它并定期更新它。

此外,数据函数也不是调用的好地方setInterval。它可以被多次调用并创建许多间隔,这是不希望的。created是一个更好的地方。

此外,请确保清除您创建的所有间隔。destroyed是这样做的好地方。

代码:

if (Meteor.isClient) {

  var zeitDep = new Deps.Dependency(); // !!!
  var zeitValue;
  var zeitInterval;

  function uhrzeit() {
    var zeit = new Date();
    var std = zeit.getHours();
    var min = zeit.getMinutes();
    zeitValue = std + ":" + min;
    zeitDep.changed(); // !!!
  };

  Template.uhr.created = function() {
    uhrzeit(); /* Call it once so that we'll have an initial value */
    zeitInterval = Meteor.setInterval(uhrzeit, 1000);
  };

  Template.uhr.zeit = function() {
    zeitDep.depend(); // !!!
    return zeitValue;
  };

  Template.uhr.destroyed = function() {
    Meteor.clearInterval(zeitInterval);
  };

}
于 2013-07-29T20:24:10.073 回答
0

代码应该是(注意()后面没有uhrzeit):

if (Meteor.isClient) {
  Template.uhr.zeit = function() {
    Meteor.setInterval(uhrzeit, 1000);
    return uhrzeit();
  };
}

您应该传递函数而不是调用函数(添加()实际上是调用函数)。

Meteor.setInterval(uhrzeit(), 1000);实际上是“<whatever is returned by uhrzeit>每 1 秒调用一次”。

于 2013-07-29T19:22:39.617 回答
0

JS:

if (Meteor.isClient) {

    const VAR_TIME = 'now';

    Session.setDefault(VAR_TIME, new Date());

    Template.time.helpers({  // <---- HIGH IMPORTANCE
        now: function() {
            return Session.get(VAR_TIME);
        }
    });

    Meteor.setInterval(function tickUpdate() {

        var date = new Date();
        Session.set(VAR_TIME, date);
        console.log(Session.get(VAR_TIME));
    }, 1000);
}

HTML:

<body>    
  {{> time}}
</body>
<template name="time">
  <p>The time now is: {{now}}</p>
</template>
于 2016-01-17T13:57:38.683 回答