Fullcalendar return event end null, когда allDay истинно
Я не знаю, является ли это признаком или ошибкой. Но значение конца события устанавливается равным null, если allDay истинно.
Это функция, в которой событие обновляется:
change: function (eventModel) {
var currEvId = eventModel.get('_id');
var fcEvent = $("#calendar").fullCalendar('clientEvents', currEvId)[0] || {};
console.log("end before update : " + fcEvent.end);
fcEvent.title = alvEventModel.get("title");
fcEvent.start = new Date(alvEventModel.get("start"));
fcEvent.end = new Date(alvEventModel.get("end"));
fcEvent.allDay = alvEventModel.get("allDay"); //true or false
this.el.fullCalendar('updateEvent', fcEvent);
console.log("start: " + fcEvent.start);
console.log("end: " + fcEvent.end);
},
Консоль показывает
end before update : 1404896400000
end after update: null
Свойство fullcalendar forceEventDuration установлено на true
this.$el.fullCalendar({
lang: 'sv',
header: {
left: 'prev,next, today',
center: 'title',
right: 'month,agendaWeek,agendaDay',
ignoreTimezone: false
},
forceEventDuration:true,
select: this.select,
selectable: true,
selectHelper: true,
editable: true,
disableDragging: true,
disableResizing: true,
aspectRatio: 2.5,
height: 600,
weekNumbers: true,
...
})
на консоли отображается
end before update : 1404864000000
end after update: 1404813300000
В этом случае рендеринг для события - один день. Даже после обновления с allDay до false он продолжает показывать однодневное событие до перезагрузки событий с сервера.
Я думаю, что стандартное поведение для allDay должно иметь дату начала и окончания. Но я не уверен, что намерение объявить дату окончания нулевой. Может быть, я не понимаю, что такое поведение. Я не знаю, как использовать для своих целей. Мне нужна дата окончания, как и другие календари.
http://jsfiddle.net/Mr_Vertigo/k3RZX/1/
И версия v2.0.2
Ответы
Ответ 1
Эта проблема не из-за того, что allday имеет значение true.
У Fullcalendar есть одна проблема: если дата начала и дата окончания одинаковы, она просто делает конечную дату нулевой.
Если дата окончания события совпадает с датой начала, FullCalendar считает, что он длится 1 день (с пустым предполагаемым временем окончания), поэтому он один в одном. Он предпочитает хранить меньше данных, чем больше. Поэтому внимательно проверьте, соответствуют ли дата начала и дата окончания.
Но вы могли бы просто сделать это как обходной путь:
eventClick: function(event) {
var start = event.start;
var end = event.end || start;
}
Проверьте следующую ссылку.
https://code.google.com/p/fullcalendar/issues/detail?id=1014
Ответ 2
Его не нужно устанавливать, потому что у вас есть опция defaultAllDayEventDuration
.
Также forceEventDuration
не относится ко всем дневным событиям (см. Здесь)
Если вы не хотите, чтобы end был пустым, просто установите его вручную.
Ответ 3
FullCalendar всегда устанавливает конец в null, когда allDay изменяется, как вы можете видеть в документе. Строка 1886
if (newAllDay != oldAllDay) {
// if allDay has changed, always throw away the end
clearEnd = true;
}