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;
}