Почему eventDragStop не может редактировать событие в обратном вызове?(FullCalendar v4) - PullRequest
0 голосов
/ 01 февраля 2019

Я использую fullcalendar (альфа-версия v4) для организации событий.
У меня есть обратный вызов 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)
                }  

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

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

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

1 Ответ

0 голосов
/ 01 февраля 2019

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

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

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

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

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

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

...