当我编辑allDay事件时,fullCalendar( 2.0.2 )会将其转换为非全天事件。在日历视图中单击事件时,我加载了一个模式,允许用户编辑详细信息。选择allDay或time不是其中的一部分,但是日期是。单击提交后,我会触发一个AJAX调用,该调用会更新事件服务器端,然后返回包含事件ID的JSON数据。然后我查询fullCalendar以获取正确的事件。此时allDay
和_allDay
仍然是true
:
theEvent = $('#calendar').fullCalendar('clientEvents', data.id)[0];
> theEvent.allDay
true
> theEvent._allDay
true
然后我用已编辑的事件对象更新fullCalendar:
calendar.fullCalendar('updateEvent', theEvent);
编辑完成后,事件将显示在日历中,12a
显示在事件标题之前。
我能够将其追踪到fullCalendar中的mutateEvent
函数,该函数似乎在以下条件中覆盖我的设置:
// current values are:
// event.allDay: true
// oldAllDay: true
// newStart: Moment object - Mon Jan 19 2015 00:00:00 GMT-0600 (CST)
// newEnd: null
// detect new allDay
if (event.allDay != oldAllDay) { // if value has changed, use it
newAllDay = event.allDay;
} else { // otherwise, see if any of the new dates are allDay
newAllDay = !(newStart || newEnd).hasTime();
}
我认为我做错了什么,但我无法确定。有人对此有意见吗?拜托,谢谢。目前我无法升级到更新的版本,因为此版本(2.0.2)似乎与我的客户选择的Ace Admin Bootstrap主题有些联系。
或者,我希望能够只允许所有日期活动,以便我将来不必担心这一点。
答案 0 :(得分:1)
虽然这并没有真正解决问题,但这个答案解决了我的问题。
只需将fullCalendar timeFormat属性设置为''。就我而言,我只有一整天的活动,所以我永远不需要时间。
http://fullcalendar.io/docs/text/timeFormat/
$('#calendar').fullCalendar({
events: [
{
title: 'My Event',
start: '2010-01-01T14:30:00',
allDay: false
}
// other events here...
],
timeFormat: ''
});
答案 1 :(得分:1)
这似乎是一个在更高版本中修复的错误。最新版本does it differently。
当您更改开始日期或结束日期并且更改的日期有时间时,它会设置allDay=false
。问题转载here。
解决方案非常简单,在事件发生时删除开始/结束的时间部分。无论如何它不应该存在。
var fcEvent = $('#calendar').fullCalendar("clientEvents",id)[0]; //get the event
// Change the start date and turn it into a string, stripping off the time.
fcEvent.start = moment().format("YYYY-MM-DD");
$('#calendar').fullCalendar("updateEvent",fcEvent);
使其成为有条件的if(fcEvent.allDay)
,它应该在不破坏其他功能的情况下解决问题。