我一直在使用完整日历,并从数据库中引入事件。当它最初呈现它们时,它会检查它们是否存储为全天事件,并根据结果将allDay设置为true或false。
这很有效,但是当一个新事件被放到日历上时,它应该重新获取所有事件,然后重新渲染它们,这样它们就不会默认为allday事件。但是,虽然正在调用重新获取,但是在它之后的重新渲染不是。但是,如果我确实在我的浏览器控制台中调用了rerender行,它会完全按照它们应该如何重新呈现它们。
所以我想我的问题是,为什么fullcalendar会重新提取事件而忽略了重新渲染?并且有解决方法吗?
非常感谢提前。我的代码是:
事件的初始呈现:
editable: true,
events: "json-events-log.php",
eventRender: function(event, element) {
if (event.event_type_id==2) {
element.addClass("red-event");
} else if (event.event_type_id==3) {
element.addClass("blue-event");
} else {
element.addClass("green-event");
}
if(event.all_day == 0){
event.allDay = false;
} else {
event.allDay = true;
}
}
通过AJAX成功发布事件后调用的成功函数:
$.ajax({
type: 'POST',
url: "new_event.php",
data: ajaxData,
success: function(data) {
if (data.moved==true) {
alert('success');
$("#calendar").fullCalendar("refetchEvents");
$("#calendar").fullCalendar("rerenderEvents");
$("#updatingCal").addClass("hiddenUpdate");
if ($('#drop-remove').is(':checked')) {
$(this).remove();
}
} else {
$("#updatingCal").addClass("hiddenUpdate");
console.log('fail');
}
},
dataType: "json"
});
答案 0 :(得分:0)
您需要在变量 - var calendar = $("#calendar").fullCalendar();
中缓存日历的jquery选择器。当你渲染日历时需要添加以下代码:
if(calendar){
calendar.fullCalendar('destroy');
}
calendar = $("#calendar").fullCalendar({
//your options
});
答案 1 :(得分:0)
问题是您正在修改eventRender回调中的事件数据。您应该修改eventDataTransform回调中的数据!