0
我正在显示一个计时器,显示自创建集合项目以来经过的时间。但是,当我在Items(切换路线/ url)之间导航时,定时器不会被破坏,并最终产生一堆泄漏的定时器。Template.destroyed()not called
我可以保留对计时器的引用并在路由器中将其杀死,但我更喜欢更简洁的方式并在模板中处理它。有任何想法吗?
<template name="itemDetails">
{{elapsedTime}}
</template>
Template.itemDetails.onRendered = function() {
var startTime = Template.currentData().startTime;
this.timeElapsed = new ReactiveVar;
this.taskTimer = Meteor.setInterval(function() {
var timeElapsedInMS = Date.now() - startTime;
var date = new Date(timeElapsedInMS);
var hours = (date.getUTCHours() < 10 ? '0' :'') + date.getUTCHours();
var minutes = (date.getUTCMinutes() < 10 ? '0' :'') + date.getUTCMinutes();
var seconds = (date.getUTCSeconds() < 10 ? '0' :'') + date.getUTCSeconds();
var timeElapsed = hours + ":" + minutes + ":" + seconds;
this.timeElapsed.set(timeElapsed);
console.log(timeElapsed);
}, 1000);
}
Template.itemDetails.helpers({
elapsedTime: function() {
return Template.timeElapsed.get();
}
});
Template.itemDetails.onDestroyed = function() {
Meteor.clearInterval(this.taskTimer);
}
使用该功能“onDestroyed”,而不是“破坏”。当你说导航时,你的意思是另一个页面?如果html没有被重新渲染,它不会被视为“销毁”,因此'onDestroyed'内的代码不会被调用。请参阅http://docs.meteor.com/#/full/template_onDestroyed – meteorBuzz
上的文档因此,我必须保持对定时器的全局引用并在路由器中将其杀死。 – oskare