在meteor助手方法中使用Session.get()会导致无限循环

时间:2016-02-22 14:20:14

标签: javascript angularjs meteor ionic-framework angular-meteor

我正在开发一个角度流星(-ionic)应用程序,我需要根据日历中的选定日期显示我的集合中的数据。 我使用不同数据类型的组件和日历,并使用Session变量将它们链接在一起。

我遇到了一个带有以下代码的无限循环:

客户端/组件/头版卡/医学/药剂card.component.js

function MedicineCardController($scope, $reactive, $location) {
   $reactive(this).attach($scope);
   var vm = this;
   vm.subscribe('medicineData');

   vm.helpers({
      latestMedicineRegistration: () => {
         var selectedDate = Session.get('selectedDate');
         return Medicine.findOne(
            {
               // If I comment this no infinite-loop
               timestamp: {$lt: moment(selectedDate).toDate()}

            }, {
               sort: {
                  timestamp: -1,
                  createdAt: -1
               }
            });
      }
   }); 
}

客户端/组件/头版卡/医学/ bloodsample-card.component.js

vm.helpers({
      latestBloodsampleRegistration: () => {

         // If I comment this, also no infinite loop
         var selectedDate = Session.get('selectedDate');

         return Bloodsample.findOne(
            {
               //timestamp: {$lt: moment(selectedDate).toDate()}
            }, {
               sort: {
                  timestamp: -1,
                  createdAt: -1
               }
            });
      }
   });

对于日历,我使用https://github.com/Russian60/flex-calendar组件,这是唯一修改所选日期的组件:

客户端/组件/日历/ calendar.component.js

function CalendarController($scope, $reactive) {
   $reactive(this).attach($scope);
   var vm = this;

   Session.set('selectedDate', new Date().valueOf());

   vm.options = {
      defaultDate: new Date(),
      minDate: "2015-01-01",
      maxDate: "2020-12-31",
      disabledDates: [],
      dayNamesLength: 1, 
      mondayIsFirstDay: true,
      eventClick: function (date) {
      },
      dateClick: function (date) {
         Session.set('selectedDate', date.date.valueOf());
      },
      changeMonth: function (month, year) {
         console.log('Month changed');
      }
   };
}

我的首页同时渲染这两个卡组件(还有几个基本相同)。我注意到的一些事情:

  • 只有在集合中找不到匹配条目时才会发生这种情况,例如:帮助器返回undefined
  • 如果只有一个助手包含Session.get(),则它按预期工作
  • 循环发生在我在日历中选择一个新日期时,它没有返回有效数据,然后选择另一个也没有有效数据的日期(因此第一次选择时不会发生循环,有时会发生第二次只在3日)
  • 我得到了重复的控制台消息,覆盖了所有使用Session.get()的帮助器 - 这就是我注意到infite循环的方式,但是一旦我设法选择返回现有数据的日期就会停止

0 个答案:

没有答案