我正在使用完整的日历 v5.3.0。我想做的是,我有两个日历来源。
- 最初,当第一次显示日历时,我必须显示来自两个来源的事件。
- 如果在加载日历后它发生更改,我有一个下拉列表,那么我必须仅显示来自下拉源的事件。
- 如果用户更改视图类型或单击上一个/下一个,那么我必须仅显示来自默认源的事件。从以上三点来看,我已经完成了第一点和第二点,但我卡在了第三点上。我无法弄清楚如何在视图类型更改或上一个/下一个按钮单击时再次将日历源从下拉列表更改为默认值。以下是我的代码。
最初加载日历的代码
var Calendar = FullCalendar.Calendar;
var Draggable = FullCalendarInteraction.Draggable;
var containerEl = document.getElementById('external-events');
new Draggable(containerEl, {
itemSelector: '.fc-event'
});
var calendarEl = document.getElementById('calendar');
calendar = new Calendar(calendarEl, {
plugins: ['interaction', 'dayGrid', 'timeGrid'],
timeZone: 'UTC',
defaultView: 'timeGridDay',
navLinks: true,
fixedWeekCount: false,
weekNumbers: true,
editable: true,
droppable: true,
nowIndicator: true,
columnFormat: 'ddd D/M',
weekNumberTitle: 'Week ',
lazyFetching: false,
eventBackgroundColor: '#ffdfc2',
eventBorderColor: 'transparent',
eventTextColor: '#bf6109',
displayEventEnd: true,
showNonCurrentDates: false,
noEventsMessage: InformationMessages('23'),
slotDuration: '00:15:00',
header: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
eventSources: [fcSources.default, fcSources.dropdown],
timeFormat: timeFormatOnSettings,
slotEventOverlap: false,
eventRender: function (info) {
if (info.view.type === 'timeGridDay') {
var time = info.el.querySelector('.fc-time');
var span = document.createElement("span");
span.className = 'fullcalendar-event-close';
var node = document.createTextNode("X");
span.appendChild(node);
time.appendChild(span);
info.el.querySelector(".fullcalendar-event-close").addEventListener("click", function () {
info.event.remove();
});
}
},
eventDidMount: function (info) {
if (info.view.type === 'dayGridMonth') {
console.log('dayGridMonth');
}
if (info.view.type === 'timeGridWeek') {
console.log('timeGridWeek');
}
if (info.view.type === 'timeGridDay') {
console.log('timeGridDay');
}
}
});
calendar.render();
两个来源下拉菜单和默认
var fcSources = {
dropdown: {
// dropdownsource code
},
default: {
// defaultsource code
}
};
删除下拉更改的所有源,然后仅添加下拉源,然后重新获取事件
$('.js-example-basic-single').change(function () {
var eventSource = [];
eventSource = calendar.getEventSources();
$.each(eventSource, function (key, value) {
value.remove();
});
calendar.addEventSource(fcSources.dropdown);
calendar.refetchEvents();
});
我尝试使用 eventDidMount 更改源,但它没有触发,console.log() 没有记录任何内容。