fullcalendar версия 4: события обновления не удаляют недавно добавленное событие

Я использую fullcalendar версии 4 и добавил пользовательскую кнопку для «обновления» календаря текущей информацией/событиями.

Вот моя кнопка:

 customButtons: {
        myReloadButton: {
            text: 'refresh',
             click: function() {
                    calendar.refetchEvents();
                    calendar_mini.refetchEvents();
               }
            }

У меня есть два календаря, которые я хочу обновить, как видите. Он работает нормально, но я заметил проблему. Когда я создаю новое событие, оно добавляется в календарь, как и должно быть. Однако, если пользователь нажимает кнопку «Обновить» сразу после этого, только что добавленное событие отображается дважды после повторной загрузки событий. Кажется, что недавно добавленное событие никогда не удалялось во время обновления.

У меня есть модальная форма, которая открывается для сбора информации о событии. Как только событие сохранено, вот как я его сохраняю (через вызов ajax). В случае успеха ajax я добавляю событие в свой календарь с помощью .addEvent().

 var location_id = $('#formEventModal #location_id').val();
 var saw_by_id= $('#formEventModal #saw_by_id').val();

$.ajax({
            url: "ajax_insert.php?table=appointments",
            dataType: 'json',
            type: "POST",
            data: $('#appointmentForm').find(':input').not('.dont_serialize').serialize(),
            success: function(response) {
                if (response.success) {

                    //get the inserted id of the appt just added so it can be updated on the stop if needed.
                    var lastInsertID = response.lastInsertID;

                    var event_object = {
                        id: lastInsertID,
                        location_id: location_id,
                        resourceId: saw_by_id,
                    };

                        calendar.addEvent(event_object);
                        calendar_mini.addEvent(event_object);

Почему кнопка обновления не удаляет недавно добавленные события?


person chris.cavage    schedule 26.11.2019    source источник
comment
ты пробовал этот? stackoverflow.com/a/56650657/9246297   -  person Nasser Ali Karimi    schedule 27.11.2019


Ответы (1)


Проблема в том, что повторная загрузка событий просто перезагружает события из определенного источника. Это не влияет на отдельные события, которые не привязаны к источнику.

Есть два способа решить эту проблему

Одним из решений является замена calendar.addEvent(event_object); в функции "успех" AJAX на просто calendar.refetchEvents(); - тогда он немедленно перезагружается с сервера, который будет включать в себя только что добавленное событие, вместо того, чтобы напрямую добавлять отдельное автономное событие в календарь.

Другой вариант — привязать событие к источнику при добавлении его в календарь. В документации по добавлению событий говорится

source представляет источник событий, с которым вы хотите связать это событие. Это может быть строковый идентификатор источника события или объект источника события. Когда источник повторно загружается, он очищает динамически добавленное событие из внутреннего кеша перед выборкой. Этот параметр является необязательным.

Поэтому, если вы дали своему источнику события идентификатор при его объявлении, вы можете разместить его здесь в качестве дополнительной опции, чтобы связать событие с источником. Что-то вроде этого:

calendar.addEvent(event_object, 1);
person ADyson    schedule 04.12.2019