在更新事件

时间:2018-09-13 16:58:27

标签: fullcalendar fullcalendar-3

我的目标是让2个不同的FullCalendar元素保持同步。我现在不进行任何网络调用,只是客户端数组。

当我添加事件时(例如通过单击或在构建事件后立即添加事件),日历实际上并未按照文档要求重新呈现。

我也尝试使用“ renderEvents”和“ renderEvent”样式,但这似乎是不必要的,因为“ updateEvents”将/应该更新这些事件的呈现。我还遇到的问题是日历列表版本上的“ renderEvent”如果超出日历范围,则不会显示我要添加的事件。

const events = [{
    title: 'All Day Event',
    start: TODAY
  },
  {
    title: 'Long Event',
    start: TODAY,
    end: NEXTDAY
  }
]

$("#calendar").fullCalendar({
  header: {
    left: '',
    center: 'title',
    right: ''
  },
  events
})

$("#events").fullCalendar({
  header: {
    left: '',
    center: 'title',
    right: ''
  },
  defaultView: 'listMonth',
  events
})

// Now add a new one
events.push([{
  title: 'Event added',
  start: YESTERDAY
}])

$('#calendar').fullCalendar('updateEvents', events)
$('#events').fullCalendar('updateEvents', events)

这是该问题的重演:

https://jsfiddle.net/Kikketer/7d92utp5/

用例非常简单:将新事件添加到事件列表,在日历上呈现事件。

1 个答案:

答案 0 :(得分:1)

首先将您的推送事件从数组更改为对象。

events.push({
   title: 'Event added',
   start: YESTERDAY
});

现在,您可以选择这样做。我会为你写两种方式。

a。

$('#calendar').fullCalendar( 'removeEvents');
$('#calendar').fullCalendar('addEventSource', events);

https://jsfiddle.net/7d92utp5/49/

b。 1)将 events 参数更改为功能

$("#calendar").fullCalendar({
  header: {
    left: '',
    center: 'title',
    right: ''
  },
  // at here
  events: function (start, end, timezone, callback) {
    callback(events);
  }
});

2)使用 refetchEvents 代替 updateEvents

$('#calendar').fullCalendar('refetchEvents');

https://jsfiddle.net/7d92utp5/53/