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