我想使用Meteor.setInterval()来更新时间模板,它不起作用

时间:2013-07-29 19:20:46

标签: javascript meteor

我想用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中的时间。

3 个答案:

答案 0 :(得分:10)

你的功能不是被动的。您需要设置依赖关系,确保您的数据功能依赖于它并定期更新它。

此外,数据功能不是调用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);
  };

}

答案 1 :(得分:0)

代码应该是{在()之后注意uhrzeit}:

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

你应该传递函数而不是调用函数(添加()有效地调用函数)。

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

答案 2 :(得分:0)

<强> JS:

<body>    
  {{> time}}
</body>
<template name="time">
  <p>The time now is: {{now}}</p>
</template>

<强> HTML:

class Base(object):
    def __init__(self):
        print("My type is", type(self))

class Derived(Base):
    def __init__(self):
        super().__init__()
        print("My type is", type(self))

d = Derived()
相关问题