完整日历版本4:refetch事件不会删除新添加的事件

问题描述 投票:0回答:1

我使用的是全日历版本4,并且添加了一个自定义按钮来“刷新”日历中的当前信息/事件。

这是我的按钮:

 customButtons: {
        myReloadButton: {
            text: 'refresh',
             click: function() {
                    calendar.refetchEvents();
                    calendar_mini.refetchEvents();
               }
            }

如您所见,我有两个日历要刷新。它工作正常,但我注意到一个问题。当我创建一个新事件时,它会按原样添加到日历中。但是,如果用户此后立即单击“刷新”按钮,则重新加载事件后,刚添加的事件将显示两次。似乎新添加的事件从未在刷新期间删除。

我有一个模式表单,可以用来收集事件信息。保存事件后,这就是我如何保存事件(通过ajax调用)。在ajax成功的情况下,我使用.addEvent()

将事件添加到日历中
 var location_id = $('#formEventModal #location_id').val();
 var saw_by_id= $('#formEventModal #saw_by_id').val();

$.ajax({
            url: "ajax_insert.php?table=appointments",
            dataType: 'json',
            type: "POST",
            data: $('#appointmentForm').find(':input').not('.dont_serialize').serialize(),
            success: function(response) {
                if (response.success) {

                    //get the inserted id of the appt just added so it can be updated on the stop if needed.
                    var lastInsertID = response.lastInsertID;

                    var event_object = {
                        id: lastInsertID,
                        location_id: location_id,
                        resourceId: saw_by_id,
                    };

                        calendar.addEvent(event_object);
                        calendar_mini.addEvent(event_object);

为什么刷新按钮不能删除新添加的事件?

javascript fullcalendar fullcalendar-scheduler fullcalendar-4
1个回答
0
投票

问题是,重新获取事件只会从已定义的源重新加载事件。它对未附加到源的独立事件没有任何影响。

有两种解决方法

一种解决方案是将AJAX“成功”函数中的calendar.addEvent(event_object);替换为简单的calendar.refetchEvents();-然后它立即从服务器重新加载,其中将包括新添加的事件,而不是直接向日历中添加单独的独立事件。

[另一个选项是将事件添加到日历时,将事件附加到源。 Add Event documentation

source代表您要关联此事件的事件源用。它可以是字符串事件源ID或事件源对象。重新获取源代码后,它将清除动态添加的提取之前从内部缓存获取事件。该参数是可选。

因此,如果在声明事件源时为其指定了ID,则可以在此处放置ID作为附加选项,以将事件与源相关联。像这样的东西:

calendar.addEvent(event_object, 1);
© www.soinside.com 2019 - 2024. All rights reserved.