1

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

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

使用上面的代码,它不起作用。如果 I 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回调的事件。

谁能告诉我这是为什么?

4

1 回答 1

1

https://fullcalendar.io/docs/v4/eventDragStop说(本身作为回调)

“在事件信息修改前触发”

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

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

无论如何,这就是为什么在拖动事件 1 时,您无法持久保存对事件 1 的其他数据的任何更新,但在拖动事件 2 或 3 时,您能够持久保存对事件 1 的更改 - 因为在这种情况下,事件 1 的数据没有被替换稍后由于拖动完成。

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

于 2019-02-01T15:51:01.213 回答