为什么eventDragStop无法在回调中编辑事件? (FullCalendar v4)

时间:2019-02-01 15:18:30

标签: javascript fullcalendar fullcalendar-4

我正在使用全日历(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回调的事件,它都可以更改该事件。

有人可以告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

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

  

“它是在事件信息被修改之前触发的”

所以我觉得这里发生了什么是fullCalendar有效地覆盖这个回调过程中您对事件数据进行任何改变。

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

总之,这就是为什么拖事件1,当你再不能坚持任何更新事件1的其他数据,但拖动事件2或3时,你能够保持变更事件1 - 因为在那个实例事件1的数据拖动完成后,以后不会替换。

除了使用eventDragStop,则应该修改活动期间eventDrophttps://fullcalendar.io/docs/v4/eventDrop)来代替。在fullCalendar完全完成对拖放操作的处理并更新了事件时间等之后,将发生此回调。因此,应保留对我希望的事件数据进行的任何进一步更改。