集合布尔值未设置为false - Meteor

时间:2017-11-08 05:48:51

标签: javascript jquery json meteor

简而言之,我正在开发的应用程序是使用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
 });
})

2 个答案:

答案 0 :(得分:0)

很可能只是您的if / else块符合您的要求:

  1. 它尝试使用指定的TimetablesTimeStart中查找文档。如果是这样,它会使该文档成为&#34;活动&#34;。

  2. 如果之前未找到任何文档,即没有时间段 TimeStart等于当前时间,那么它会尝试查找具有指定TimeEnd的文档。

  3. 但如果之前的else if块找不到任何内容,则if块只会执行

    因此,如果您的下一个时间段在当前时间段结束时开始,则会为下一个时间段执行if块,但永远不会执行else if块以取消激活当前时间段

    一个简单的解决方案是在一个独立的else if块中转换if块,以便测试前一个块(即TimeStart)是否找到了某些内容。

答案 1 :(得分:0)

好的,所以我最终得到了它。我的问题是它永远不会进入第二个IF声明。 我所做的是设置一个全新的Meteor.interval(()&gt;)函数,并将第二个IF放在那里,原样。

我认为问题在于它检查了第一个IF语句并且卡在那里,无论参数的结果是什么。