Невозможно прочитать свойство split из undefined, используя календарь - PullRequest
0 голосов
/ 06 октября 2018

Я работаю над календарем с js в моем проекте для доступности, он работает правильно.но когда у меня есть запись, у которой дата начала равна дате окончания.для добавления события в мой календарь я использую этот push:

listDate.push({startDate :strDate, endDate : enDate});

в моем сценарии datetimepicker это функция isAvailable

isAvailable: function(date, month, year) {
      for (var i in this.unavailable) {
         var book_date = this.unavailable[i].startDate.split("-");
          if (book_date.length !== 3) {
             return false;
          } else if (
              (book_date[0] == "*" || book_date[0] - year === 0) &&
              (book_date[1] == "*" || book_date[1] - month === 0) &&
              (book_date[2] == "*" || book_date[2] - date === 0)
          ) {
              return false;
          }
       }
       return true;
    }

Я получаю следующие проблемы: Cannot read property 'split' of undefined in this line

  var book_date = this.unavailable[i].startDate.split("-");

пожалуйста, помогите, спасибо за вас

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Код не выдает никаких ошибок в моей консоли.Можете ли вы попытаться сохранить значение unavailable в отдельной переменной и использовать эту переменную вместо этого.Это может помочь.

isAvailable: function(date, month, year) {
  var unavailable = this.unavailable;
  for (var i in unavailable) {
     var book_date = unavailable[i].startDate.split("-");
      if (book_date.length !== 3) {
         return false;
      } else if (
          (book_date[0] == "*" || book_date[0] - year === 0) &&
          (book_date[1] == "*" || book_date[1] - month === 0) &&
          (book_date[2] == "*" || book_date[2] - date === 0)
      ) {
          return false;
      }
   }
   return true;
}
0 голосов
/ 07 октября 2018

Вы используете цикл for in для итерации по массиву - циклы for in должны использоваться только для объектов.Вы должны использовать обычный цикл или forEach

isAvailable: function(date, month, year) {
  for (var i = 0; i < this.unavailable.length; i++) {
     var book_date = this.unavailable[i].startDate.split("-");
      if (book_date.length !== 3) {
         return false;
      } else if (
          (book_date[0] == "*" || book_date[0] - year === 0) &&
          (book_date[1] == "*" || book_date[1] - month === 0) &&
          (book_date[2] == "*" || book_date[2] - date === 0)
      ) {
          return false;
      }
   }
   return true;
}
0 голосов
/ 06 октября 2018

this.unavailable[i].startDate не определено.listDate ссылается на this.unavailable или это другой массив?Установите точку останова или используйте console.log для проверки содержимого this.unavailable в функции isAvailable.

...