Я использую 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 каждый раз, когда я хочу удалить все источники событий, поэтому я уверен, что все они пропали. Как я могу использовать это?