Почему eventDragStop не может редактировать событие в обратном вызове? (FullCalendar v4)

Я использую fullcalendar (альфа версии 4) для организации событий.
у меня есть eventDragStop обратный вызов, который я пытаюсь использовать, чтобы установить extendedProp для события, отмечая, что событие было изменено.

eventDragStop: function (info) {
                        calendar.getEventById(info.event.id).setExtendedProp("extra2", true)
                }  

Используя приведенный выше код, он не работает. Если я alert(info.event.id)Я вижу, что для перетаскиваемого события вызывается правильный идентификатор, и я не получаю ошибок.

Если у меня есть три события в календаре с идентификаторами: 1, 2, 3, и используйте следующий код:

eventDragStop: function (info) {
                        calendar.getEventById(1).setExtendedProp("extra2", true)
                }  

Итак, явное указание изменить ID номер 1, а не событие в обратном вызове.
Если я перетащу событие № 1, это тоже не сработает. Однако, если я перетащу событие 2 или 3, оно сработает и изменит событие 1.

И наоборот, любое событие, которое я прямо заявляю, сможет изменить это событие, при условии, что это не было событием, которое вызвало eventDragStop Перезвоните.

Может кто-нибудь сказать мне, почему это?

1 ответ

Решение

https://fullcalendar.io/docs/v4/eventDragStop говорит (о себе как обратный вызов)

"Это срабатывает до того, как информация о событии была изменена"

Поэтому я думаю, что здесь происходит то, что fullCalendar эффективно перезаписывает любые изменения, которые вы вносите в данные события во время этого обратного вызова.

Я думаю, это потому, что объект события может быть заменен новой версией (созданной на основе его последнего места покоя) через некоторое время после выполнения этого обратного вызова.
Я не проверил это, посмотрев на исходный код, но это логичное объяснение проблемы, с которой вы сталкиваетесь, и также имеет некоторый смысл, что объект события будет обновляться (с новыми датами / временем и т. Д.) После завершения перетаскивания. и что это может фактически включать в себя полное обновление данных объекта в это время.

В любом случае, именно поэтому при перетаскивании события 1 вы не можете сохранить какие-либо обновления других данных события 1, но при перетаскивании события 2 или 3 вы можете сохранить изменения в событии 1, поскольку в этом случае данные события 1 не заменяются. позднее в результате перетаскивания будет завершено.

Вместо того, чтобы использовать eventDragStop, вы должны изменить событие во время eventDrop ( https://fullcalendar.io/docs/v4/eventDrop). Этот обратный вызов происходит после того, как fullCalendar полностью завершил обработку перетаскивания и обновления времени события и т. Д. Поэтому любые дальнейшие изменения, которые вы вносите в данные события, которые я ожидаю, должны быть сохранены.

Другие вопросы по тегам