allDay为true时,fullcalendar返回事件结束null
我不知道它是一个功能还是一个错误。 但是,如果allDay为true,则事件结束值将设置为null。 这是事件更新的功能:
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
这个问题不是因为全天设置为真。 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
不适用于全天事件(请参阅此处)
如果你不想结束为空,那么只需将其设置为manualy即可。
当allDay如您在文档中看到的那样发生变化时,FullCalendar始终将结束设置为null。 1886行
if (newAllDay != oldAllDay) {
// if allDay has changed, always throw away the end
clearEnd = true;
}
链接地址: http://www.djcxy.com/p/39415.html