2016-03-06 79 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