当allDay为真时,fullcalendar返回事件结束null

fullcalendar return event end null when allDay is true

本文关键字:返回 事件 结束 null fullcalendar allDay      更新时间:2023-09-26

我不知道这是一个功能还是一个bug。但是如果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必须有一个开始和结束的日期。但我不确定宣布结束日期为null的意图。也许我误解了这种行为的美妙之处。我不知道如何利用我的目标。我需要一个像其他日历一样的结束日期。

http://jsfiddle.net/Mr_Vertigo/k3RZX/1/版本号是v2.0.2

这个问题不是因为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

不需要设置,因为您有defaultAllDayEventDuration选项。forceEventDuration也不适用于全天事件(见这里)

如果您不希望end为null,则只需手动设置。

FullCalendar总是在allDay更改时将end设置为null,正如您在文档中看到的那样。第1886行

if (newAllDay != oldAllDay) {
        // if allDay has changed, always throw away the end
        clearEnd = true;
}