使用FullCalendar,如何在eventReceive时向EventObject添加信息?

Using FullCalendar, how to add information to EventObject when eventReceive?

我已经开始发现并使用 FullCalendar,但我一直坚持使用它。

我想要做的是 ResourceTimelineMonth 视图中,带有外部事件拖动(左面板)。

稍后的主题是当你放弃一个事件时有一个模态,以便选择你想要事件是从早上 8 点到中午 12 点,还是下午从中午 12 点到下午 6 点。

所以首先,我想做一个没有模态的简单 eventReceive,看看我是否可以在事件被删除时更新它。

但是我好像做不到,我做错了什么?

据我所知,当您在月视图中删除一个事件时,发送到 eventReceive 的参数中的事件会被修改。

eventReceive(info) {
  info.event.start = moment(info.event.start).add(8, 'hours').format('YYYY-MM-DD hh:mm:ss');
  // var c = confirm('OK = morning, Cancel = aprem');
  // if (c) {
  //   console.log("morning !")
  // } else {
  //   console.log("afternoon !")
  // }
}

事件非常基本,因为我想在将它们放入日历时完成它们

new Draggable(listofEvents, {
  itemSelector: '.draggable',
  eventData(event) {
    return {
      title: event.innerText,
      activite: event.dataset.activite,
      allDayDefault: false,
    }
  },
})

我什至试图将 allDayDefault 强制设置为 false,但这并没有改变任何事情...

这是项目当前状态的codepen:https://codepen.io/nurovek/pen/zYYWGyX?editors=1000

对不起,如果我的post缺乏信息,我不习惯在SO上提问。如果缺少它,如果你问我,我会尽量更明确,当然!

根据 documentation, an event's public properties (such as "start", "end", title" etc) are read-only. Therefore to alter a property after the event is created you must run one of the "set" methods

因此,如果您使用 setDates 方法,您的想法就会奏效:

eventReceive(info) {
  info.event.setDates(moment(info.event.start).add(8, 'hours').toDate(), info.event.end, { "allDay": false } )
  console.log(info.event);
}

演示:https://codepen.io/ADyson82/pen/dyymawy?editors=1000


P.S。您可能会注意到我还对您的 CodePen 做了一些其他的小改动,主要是为了更正所有指向 CSS 和 JS 文件的链接,因为它会生成各种控制台错误。这些错误是因为链接错误或只是引用了不存在的东西,并且出于某种原因,您还使用了来自两个不同版本的 fullCalendar(4.3.0 和 4.3.1)的文件,如果您想要,这绝不是一个好主意以确保完全兼容。