FullCalendar удалить все источники событий после использования addEventSource - PullRequest
0 голосов
/ 20 апреля 2020

Я использую FullCalendar v4 для создания инструмента планирования. Поскольку в некоторых месяцах много событий, я получаю только первые 200. Это делает начальную загрузку намного быстрее. Когда я прокручиваю вниз и достигаю нижней части календаря, я вызываю метод addEventSource. Каждый раз, когда я вызываю этот метод, я получаю следующие 200 событий. Я использую jQuery для увеличения значения смещения для сценария mysql на 200 каждый раз. Когда все события за этот месяц загружены, я могу снова вызвать addEventSource, но он вернет пустой массив, как и ожидалось. Это прекрасно работает в тот месяц, когда открывается календарь.

Но если я go к предыдущему, следующего месяца, он получит все источники событий, которые я получил за предыдущий месяц. Он получит события со смещением 200, 400, 600, 800 и т. Д., В зависимости от того, сколько раз я прокручивал до дна в предыдущем месяце. Таким образом, все события загружаются в первый раз, что делает его медленным.

Мне нужен способ удалить источник событий, который я добавил сразу после этого. Или удалите все источники событий, когда я нажму на предыдущую или следующую кнопку. И я не могу понять, как использовать метод eventSource.remove () для этого.

Это мой код для добавления события при прокрутке.

var recentScroll = false;
$('#calendar .fc-scroller').off().on('scroll', function() {
  if (!recentScroll && $(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
    var offset = localStorage.getItem("offset");
    offset = parseInt(offset) + 200;
    localStorage.setItem("offset", offset);
    recentScroll = true;

    window.setTimeout(() => {
      recentScroll = false;
    }, 2000)

    var event = {
      url: 'load_select_test1.php',
      method: 'POST',
      extraParams: function() {
        return {
          cursus_id: localStorage.getItem("cursus_select"),
          evenement_id: localStorage.getItem("evenement_select"),
          locatie_id: localStorage.getItem("locatie_select"),
          trainer_id: localStorage.getItem("trainer_select"),
          resource_select: localStorage.getItem("resource_select"),
          omgeving_id: localStorage.getItem("omgeving_id"),
          offset: offset
        };
      },
      failure: function() {
        alert('er ging iets mis bij het ophalen van de gegevens');
      }
    };

    calendar.addEventSource(event)
    eventSource.remove(event)
  }
});

Я использовал .off () для функции прокрутки, чтобы отсоединить предыдущие обработчики событий. И я использовал метод eventSource.remove (). Но это не устранило проблему.

Я также вызываю метод eventSource.remove () для предыдущей и следующей кнопок. Но это тоже не исправит.

$('.fc-icon-chevron-left').off().on("click", function() { 
  eventSource.remove()
});

Поскольку переменная смещения для сценария mysql увеличивается на 200 каждый раз, когда я хочу удалить все источники событий, поэтому я уверен, что все они пропали. Как я могу использовать это?

...