【问题标题】:Why can't eventDragStop not edit the event in the callback? (FullCalendar v4)为什么 eventDragStop 不能在回调中编辑事件? (FullCalendar v4)
【发布时间】: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


【解决方案1】:

https://fullcalendar.io/docs/v4/eventDragStop 表示(作为回调)

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多