首页 > 解决方案 > 使用fullCalendar将allDay设置为false时,如何动态设置事件开始和结束时间?

问题描述

我正在使用一个完整的日历应用程序,在单击一个事件时,它会打开一个带有事件信息的模式。在此模式中,也可以更改事件数据,例如 event.start、event.end 和 event.allDay。

单击 allDay 复选框时,事件会自动更新以表示新状态,但是,当事件之前是非 allDay 事件时。事件数据包含两个额外的属性:oldStart 和 oldEnd。这两个属性我想在 event.allDay 设置为 false 时使用;然后应将 event.start 设置为 oldStart,并将 event.end 设置为 oldEnd。

问题在于,使用此方法,在将 event.allDay 设置为 false 后更新事件的开始和结束时间时,更新时的事件会从日历视图中消失,并且正在后端更新以表示开始时间为00:00 和结束时间作为事件开始 + 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);

谁能告诉我我在这里想念什么?

标签: javascriptfullcalendar

解决方案


存放日期时,请制作一份副本。你set马上打电话,这会抹杀你原来的时间。

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

当您从 allDay 切换回来时,您的事件没有持续时间。


推荐阅读