为什么 eventDragStop 不能编辑回调中的事件?(完整日历 v4)



我正在使用fullcalendar(v4-alpha)来安排事件
我有一个eventDragStop回调,我正试图使用它来设置事件的extendedProp,标志着该事件已被更改。

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

使用上面的代码,它不起作用。如果我alert(info.event.id),我可以看到正在为被拖动的事件调用正确的ID,并且没有错误。

如果我在日历上有三个事件,ID为:1、2、3,并使用以下代码:

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

因此,显式声明更改ID编号1,而不是回调中的事件
如果我拖动事件编号1,这也不起作用。但是,如果我拖动事件2或3,它将工作并更改事件1。

反之亦然,我明确声明的任何事件都可以更改该事件,前提是该事件不是触发eventDragStop回调的事件。

有人能告诉我为什么会这样吗?

https://fullcalendar.io/docs/v4/eventDragStop说

"在修改事件信息之前触发">

所以我认为这里发生的事情是fullCalendar有效地覆盖了您在回调期间对事件数据所做的任何更改。

我认为这是因为在这个回调运行一段时间后,事件对象可能会被替换为一个新版本(基于其最终的静止位置构建)
我还没有通过查看源代码来验证这一点,但这是对您看到的问题的合乎逻辑的解释,而且在拖动完成后,事件对象会得到更新(使用新的日期/时间等),这在一定程度上也是有道理的,而且这实际上可能涉及到当时对象数据的完全刷新。

无论如何,这就是为什么当拖动事件1时,您无法保留对事件1的其他数据的任何更新,但当拖动事件2或3时,您可以保留对事件的更改,因为在这种情况下,由于拖动完成,事件1的数据在以后不会被替换。

应该在eventDrop期间修改事件,而不是使用eventDragStop(https://fullcalendar.io/docs/v4/eventDrop)相反。此回调发生在fullCalendar完全完成拖放处理并更新事件时间等之后。因此,应该保留您对事件数据所做的任何进一步更改。

最新更新