2016-03-06 81 views
0

我用下面的代码得到一个错误:流星 - 模板递归函数onrendered

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); 

流星返回以下错误:

Uncaught ReferenceError: chronometer is not defined 

我应该把这样的自定义代码放在模板onRendered功能?我也试图直接将它包含在<script>标签的模板中,并且到目前为止它的工作原理!但这不是一个坏习惯吗?

回答

0

这不是递归,你只需要通过函数引用setTimeout的不是一个字符串:

setTimeout(chronometer, 1000); 
+0

......谢谢你,这是非常愚蠢的我... 我得到了第二个问题(并希望它不如我的第一张那么糟糕),每当我浏览页面并返回时,计时器功能都会被重复,从而导致奇怪的UI可视化。当我离开模板时,是否应该杀死函数? – Krem

+0

我想我找到了我的解决方案:http://stackoverflow.com/questions/31871785/meteor-how-to-clearinterval-ondestroyed-created-in-onrendered-祝你有美好的一天;) – Krem