gpt4 book ai didi

javascript - meteor : How to clearInterval() onDestroyed() created in onRendered()

转载 作者:搜寻专家 更新时间:2023-11-01 04:56:45 25 4
gpt4 key购买 nike

我有一个每秒运行的倒计时功能,所以我提供了 setInterval()。在我移动到另一个模板后,间隔函数继续运行。如何销毁它 onDestroyed()。下面的代码将帮助您更好地理解。

<template name="Home">
<h4>{{timeremaining}}</h4>
</template>


Template.Home.helpers({
timeremaining : function(){
return Session.get('timeremaining');
}
});

Template.Home.onRendered(function () {

// time functions begin
var end_date = new Date(1476337380000); // I am getting timestamp from the db.

var run_every_sec = setInterval(function () {

var current_date = new Date();
var remaining = end_date.getTime() - current_date.getTime();

var oneDay = 24*60*60*1000;
var diffDays = Math.round(Math.abs(remaining/oneDay));

console.log(remaining); // am getting this log in every template.

if (remaining > 0) {
//set remaining timeLeft
Session.set('timeremaining',diffDays + ' Days ' + (Math.abs(end_date.getHours()-current_date.getHours())).toString() + ' Hrs ' + (Math.abs(end_date.getMinutes()-current_date.getMinutes())).toString() + ' Min ' + (60 - end_date.getSeconds()-current_date.getSeconds()).toString() + ' Sec ')
} else {
clearInterval(run_every_sec);
}

}, 1000);
//time functions end



}.bind(this));

Template.Home.onDestroyed(function () {
clearInterval(run_every_sec); // Here I cant remove this time interval
});

我们可以将run_every_sec 声明为全局函数。如果是,如何传递 end_date。我认为在 run_every_sec 中声明 end_date 是不明智的,因为它来自 db。

最佳答案

如果您像 Repo 建议的那样将间隔存储在文件范围内,那么如果一次有多个模板实例,您就会遇到问题:两个实例将使用相同的 run_every_sec 变量。在这种情况下,您需要将间隔存储在模板实例上,它可以作为 onRenderedonDestroyed 中的 this 访问:

Template.Home.onRendered(function () {
this.run_every_sec = setInterval(/* ... */);
});

Template.Home.onDestroyed(function () {
clearInterval(this.run_every_sec);
});

这样,模板的每个实例都会有自己的 run_every_sec 属性。

关于javascript - meteor : How to clearInterval() onDestroyed() created in onRendered(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31871785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com