Я реализую fullcalendar на своей веб-странице, и я столкнулся с странной ошибкой. Событие настроено правильно, но когда календарь загружен, он отображается в неправильном месте в календаре и с неправильной продолжительностью. Когда я перетаскиваю событие или обновляю календарь, событие помещается правильно и его продолжительность тоже. Даже отметка времени в названии события правильная, только позиция неверна. Проблема также возникает, когда в календаре есть только одно событие с несколькими событиями, все правильно.
_render: function(){
this._super('_render',arguments);
this.getCalendar().fullCalendar({
defaultView: 'agendaWeek',
editable:true,
height: 600,
});
this.getCalendar().fullCalendar( 'renderEvent', {
title: "purple",
start: "2018-02-07T11:30:00+01:00",
end: "2018-02-07T14:15:00+01:00",
color: "purple",
}, true);
// this.renderMeetings();
},
Кто-нибудь знает, как это исправить? Также обратите внимание, что серые области "нерабочих" часов утрачены
EDIT: немного сузилась проблема - это происходит даже тогда, когда я просто пытаюсь сделать статическое событие
EDIT2: упрощенные настройки календарей, все те же...
EDIT3: когда я пробовал код на пустой странице, он работал так, как ожидалось, поэтому календарь должен каким-то образом вмешиваться в мой другой код... любые идеи как?
Я не уверен, если "официальный" метод добавления новых событий в календарь осуществляется через метод renderEvent. Как указано в документации, это может привести к исчезновению событий при пейджинге.
Попробуйте добавить свои события с помощью метода addEventSource, примерно так:
renderMeetings: function(){
this.getCalendar().fullCalendar( 'removeEvents');
var dates = this.getCalendarDateRange();
var userId = this.controls.get('userId') || app.user.id;
var meetings = app.data.createRelatedCollection(app.data.createBean('Users',{id:userId}), 'meetings');
var start = moment(dates.start.toISOString()).format("Y-MM-DD HH:mm:ss");
var end = moment(dates.end.toISOString()).format("Y-MM-DD HH:mm:ss");
meetings.fetch({
filter: {
"date_start" : {"$between" : [start,end]},
},
success: _.bind(function(){
this.getCalendar().fullCalendar( 'addEventSource',
meetings.map(function(meeting){
return {
title:meeting.get('name'),
start: meeting.get('date_start'),
end: meeting.get('date_end'),
color: meeting.get('name'),
id: meeting.id,
module: meeting.module
}
},this));
},this),
limit: -1
});
}
Я нашел обходное решение, но не исправил, поэтому не буду отмечать его как ответ...
Когда я вызываю this.getCalendar().fullCalendar( 'rerenderEvents' )
после визуализации события, событие помещается правильно.