简而言之,我正在开发的应用程序是使用Meteor作为练习项目的公交车时刻表应用程序。
在我的body.js中,我有一个每秒运行一次的间隔,以获取当前时间并与集合中的项目进行比较。
为了显示相关时间,我添加了一个isActive布尔值,每当当前时间=集合的sartTime时,它将其设置为true,这样就可以了。 但是当我为endTime做同样的事情并尝试将其设置为false时,我可以隐藏该时间段,它只是不起作用。即使是游戏机也不会出现。我错过了什么?我最近刚开始做流星,所以请原谅裁员。 值得注意的是,我所比较的时间是从CSV文件导入的时间,因此它们必须采用00:00 AM / PM格式。
非常感谢你们的时间。
Body.js代码:
Template.Body.onCreated(function appBodyOnCreated() {
Meteor.setInterval(() => {
var h = (new Date()).getHours();
const m = ((new Date()).getMinutes() <10?'0':'') + ((new Date()).getMinutes());
var ampm = h >= 12 ? ' PM' : ' AM';
ampmReac.set(ampm);
if (h > 12) {
h -= 12;
} else if (h === 0) {
h = 12;
}
const timeAsAString = `${h}${m}`;
const timeAsAStringFormat = `${h}:${m}`;
whatTimeIsItString.set(timeAsAStringFormat + ampm); // convert to a string
const timeAsANumber = parseInt(timeAsAString); // convert to a number
whatTimeIsIt.set(timeAsANumber); // update our reactive variable
if (Timetables.findOne({TimeStart: whatTimeIsItString.get()}).TimeStart == whatTimeIsItString.get())
{
var nowTimetable = Timetables.findOne({TimeStart: whatTimeIsItString.get() });
Timetables.update({_id : nowTimetable._id },{$set:{isActive : true}});
console.log('I am inside the START statement');
}
else if (Timetables.findOne({TimeEnd: whatTimeIsItString.get()}).TimeEnd == whatTimeIsItString.get())
{
var nowTimetable = Timetables.findOne({TimeEnd: whatTimeIsItString.get() });
Timetables.update({_id : nowTimetable._id },{$set:{isActive : false}});
console.log('I am inside the END statement');
}
}, 1000); //reactivate this function every second
});
})
答案 0 :(得分:0)
很可能只是您的if
/ else
块符合您的要求:
它尝试使用指定的Timetables
在TimeStart
中查找文档。如果是这样,它会使该文档成为&#34;活动&#34;。
如果之前未找到任何文档,即没有时间段 TimeStart
等于当前时间,那么它会尝试查找具有指定TimeEnd
的文档。
但如果之前的else if
块找不到任何内容,则if
块只会执行。
因此,如果您的下一个时间段在当前时间段结束时开始,则会为下一个时间段执行if
块,但永远不会执行else if
块以取消激活当前时间段
一个简单的解决方案是在一个独立的else if
块中转换if
块,以便测试前一个块(即TimeStart)是否找到了某些内容。
答案 1 :(得分:0)
好的,所以我最终得到了它。我的问题是它永远不会进入第二个IF
声明。
我所做的是设置一个全新的Meteor.interval(()&gt;)函数,并将第二个IF
放在那里,原样。
我认为问题在于它检查了第一个IF
语句并且卡在那里,无论参数的结果是什么。