【问题标题】:Meteor - Recursive function in template onrenderedMeteor - 模板中的递归函数 onrendered
【发布时间】:2016-03-13 20:04:13
【问题描述】:

我收到以下代码的错误:

Template.crowd.onRendered(function () {

var zecsec = 0;
var hours = 1;
var mints = 34;
var seconds = 52;

function chronometer() {
    zecsec += 1;

    // set seconds
    if(zecsec > 0) {
      zecsec = 0;
      seconds += 1;
    }

    // set minutes
    if(seconds > 59) {
      seconds = 0;
      mints += 1;
    }

    // set hours
    if(mints > 59) {
      seconds = 0;
      mints = 0;
      hours += 1;
    }

    $('.chrono').html(hours + 'h ' + mints + 'min ' + seconds + 's');
    setTimeout("chronometer()", 1000);
}
chronometer(); });

当我递归调用计时器函数时,问题就来了:

setTimeout("chronometer()", 1000);

Meteor 返回以下错误:

Uncaught ReferenceError: chronometer is not defined

我应该把这样的自定义代码放在模板onRendered函数中吗?我还尝试将它直接包含在带有<script> 标签的模板中,到目前为止它可以工作!但这不是一个坏习惯吗?

【问题讨论】:

    标签: function templates recursion meteor


    【解决方案1】:

    这与递归无关,您只需将函数引用传递给 setTimeout 而不是字符串:

    setTimeout(chronometer, 1000);
    

    【讨论】:

    • ...谢谢你,我太愚蠢了...我有第二个问题(希望它不像我的第一个问题那么糟糕),每次我离开页面并且回来,计时器功能被复制,导致奇怪的 ui 可视化。当我离开模板时我应该终止该功能吗?
    • 我想我找到了解决方案:stackoverflow.com/questions/31871785/… - 祝你有美好的一天;)
    猜你喜欢
    • 2016-01-05
    • 2016-03-25
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多