【问题标题】:How to set event start and end time dynamically when allDay is set to false with fullCalendar?使用fullCalendar将allDay设置为false时,如何动态设置事件开始和结束时间?
【发布时间】:2018-09-13 09:10:48
【问题描述】:

我正在使用一个完整的日历应用程序,在单击事件时,它会打开一个包含事件信息的模式。在此模式中,也可以更改事件数据,例如 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);

谁能告诉我这里缺少什么?

【问题讨论】:

  • 您能给我们举个例子吗?请提供一些发生此问题的事件的真实事件数据? “findEvent”还有什么作用?它是否从 fullCalendar 本身获取当前事件(例如,使用“clientEvents”方法)?您是否查看过浏览器的网络工具和/或设置 JS 断点来检查请求提交到服务器时的变量值,以查看当时的开始/结束值是什么?即证明这不是后端的错?

标签: javascript fullcalendar


【解决方案1】:

在存放日期时复制它们。你马上就打电话给set,这会抹杀你原来的时间。

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

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

【讨论】:

  • 谢谢!创建副本为我解决了这个问题:)
猜你喜欢
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多