Как динамически установить время начала и окончания события, когда для allDay задано значение false с fullCalendar? - PullRequest
0 голосов
/ 13 сентября 2018

Я использую приложение fullcalendar, где при нажатии на событие открывается модальное окно с информацией о событии. В этом модале также можно изменить данные события, например, event.start, event.end и event.allDay.

Когда флажок allDay установлен, событие автоматически обновляется, чтобы представить новое состояние, однако, когда событие ранее было событием не-allDay. Данные события содержат два дополнительных свойства: oldStart и oldEnd. Эти два свойства я хочу использовать, когда для event.allDay задано значение false; Затем для event.start должно быть установлено значение oldStart, а для event.end - oldEnd.

Проблема заключается в том, что при использовании этого метода при обновлении времени начала и окончания события после установки для свойства event.allDay значения false, когда обновление обновляется, оно исчезает из представления календаря и обновляется в серверной части для представления время начала 00:00 и время окончания события start + defaultEventDuration (в моем случае это 02:00:00).

Мой код выглядит так:

function changeAllDay(id) { // Function to change allDay property of event that was clicked on

    // Find corresponding event
    var event = findEvent(id);

    event.allDay = !event.allDay; // Change allDay value

    // Set start and end time to midnight if event is allDay
    if (event.allDay) {

        event.oldStart = event.start;
        event.oldEnd = event.end;

        event.start.set('hours', 00);
        event.start.set('minutes', 00);
        event.end.set('hours', 00);
        event.end.set('minutes', 00);

    } else {

        event.start = event.oldStart;
        event.end = event.oldEnd;
    };

    updateEvent(event);
}

Функция updateEvent () выполняет API-вызов для обновления события в серверной части, а в случае успеха событие обновляется с помощью

$('#calendar').fullCalendar('updateEvent', event);

Кто-нибудь может сказать мне, что мне здесь не хватает?

1 Ответ

0 голосов
/ 13 сентября 2018

Сделайте копию ваших дат при их хранении. Вы звоните set сразу после этого, и это стирает ваше первоначальное время.

    event.oldStart = event.start.clone();
    event.oldEnd = event.end.clone();

Когда вы возвращаетесь из allDay, ваши события не имеют длительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...