【发布时间】:2019-02-01 15:18:29
【问题描述】:
我正在使用 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 回调的事件。
谁能告诉我这是为什么?
【问题讨论】:
-
fullcalendar.io/docs/v4/eventDragStop 表示“在事件信息修改之前触发”。因此,如果我不得不猜测,我会说 fullCalendar 有效地覆盖了您在此处所做的任何更改。我认为这是因为事件对象可能会在此回调运行后的某个时间被新版本(基于其最终休息位置构建)替换。这可能就是为什么拖动事件 1 不起作用,但拖动事件 2 或 3 能够更新事件 1 - 因为在该实例中,事件 1 不会在以后被替换。
-
我个人会尝试在fullcalendar.io/docs/v4/eventDrop 期间尝试修改事件。此回调发生在 fullCalendar 完全完成处理拖放操作并更新事件时间等之后。因此,您对我期望的事件所做的任何进一步更改都应保留。 ... P.S.我把它写成评论而不是答案,因为我没有任何证据,这只是我的推论。尝试一下。如果可行,我会很乐意将其添加为正确答案...让我知道您的进展情况。
-
@ADyson 我也在使用 eventDragStop,因为我正在检查事件是否被删除到日历之外(临时删除以测试此问题..)。我已将它们分成两个单独的回调,并按照您的建议使用 eventDrop 检查调整,并且效果很好。我猜 eventDragStop 必须按照您的建议创建自己的事件实例,然后在回调后更新真实事件 - 覆盖任何更改.. 谢谢!
-
为什么您需要知道事件是否被删除到日历之外?如果用户将其放在日历之外,则根本不会发生任何事情。你可以忽略它,确定吗?或者您是否认为这表明该事件应该被删除?无论如何,很高兴对你有所帮助,我会写一个答案。
-
正确 - 删除日历以删除事件!我的错,没有完全解释这一点。
标签: javascript fullcalendar fullcalendar-4