2013-07-29 56 views
3

我想用Meteor.setInterval命令更新我的時間函數。我想使用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中的時間。

+1

'Meteor.setInterval(uhrzeit,1000);'你想通過函數,而不是它的返回值。 –

回答

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

} 
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>」。

+0

你解決了我的錯誤信息。儘管我的模板沒有使用此代碼進行更新。有任何想法嗎? –

+1

'uhrzeit()'的效果只是簡單地將'std +「:」+ min'返回到無處。其結果不分配給任何東西。你可能想實際上更新'uhrzeit'的東西。 – mishik

+0

我想通過再次調用函數,它會再次拉動一個新的日期。 –

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> 
相關問題