Javascript 在Fullcalendar v4中切换月份时会复制事件
我正在像这样使用Fullcalendar v4。事件已正确加载,但当我手动添加一个新事件(它也通过ajax调用保存到SQL数据库)时,我更改月份并返回,该事件将呈现两次。我不确定这是什么原因造成的,因为当我再次改变月份时,事件仍然只是翻了一番,而不是翻了一番 我已经尝试将lazyLoading或cache设置为false,例如,在使用Javascript 在Fullcalendar v4中切换月份时会复制事件,javascript,duplicates,fullcalendar,fullcalendar-4,Javascript,Duplicates,Fullcalendar,Fullcalendar 4,我正在像这样使用Fullcalendar v4。事件已正确加载,但当我手动添加一个新事件(它也通过ajax调用保存到SQL数据库)时,我更改月份并返回,该事件将呈现两次。我不确定这是什么原因造成的,因为当我再次改变月份时,事件仍然只是翻了一番,而不是翻了一番 我已经尝试将lazyLoading或cache设置为false,例如,在使用$('.fc event')进行渲染之前删除所有事件。remove()但它没有帮助 var calendar = new FullCalendar.Calendar
$('.fc event')进行渲染之前删除所有事件。remove()代码>但它没有帮助
var calendar = new FullCalendar.Calendar(document.getElementById('calendar'), {
defaultView: 'resourceTimeline30',
views: {
resourceTimeline30: {
type: 'resourceTimeline',
duration: { days: 30 }
}
},
editable: false,
selectable: true,
resources: [ ... ],
events: 'https://www.example.com/?fullcalendar=load',
/*
// did not help
lazyLoading: true,
events: {
url: 'https://www.example.com/?fullcalendar=load',
cache: false,
extraParams: function() {
return {
cachebuster: new Date().valueOf()
};
}
}
*/
});
calendar.render();
因此,根据上面的评论,如果有人需要,工作解决方案是:
替换:
events: 'https://www.example.com/?fullcalendar=load',
与
并将该ID用作addEvent()中的第二个参数
因此,根据上面的评论,如果有人需要,工作解决方案是:
替换:
events: 'https://www.example.com/?fullcalendar=load',
与
并将该ID用作addEvent()中的第二个参数
事实上,它翻了一番可以归结为服务器端数据源(每月变化时都会调用,以获取当月的新事件)和直接手动输入。我建议您不要将手动添加的事件标记为持久事件。是的,我也这么认为,但我不知道如何避免这种情况。您提到“不要将手动添加的事件标记为持久事件”。我在谷歌上搜索了一下,但在FC文档中找不到任何选项。你能多谈谈这个想法吗?就像我写的一样,我尝试使用$('.fc event')删除所有事件代码>,但手动添加的事件仍然存在。因此,此功能在fullCalendar 4及更高版本中的实现略有不同。我想我的话是针对旧版本的,所以我道歉。因此,请阅读并记下有关源
参数的注释-如果您a)使用事件源并为事件源提供ID,或b)只需将此值设置为true
,就可以将手动添加的事件与该源关联,然后fullCalendar将确保下次从服务器获取事件时,它还将删除手动添加的copyP.S<代码>$('.fc事件')。删除()
不会有帮助,因为这只会删除用于在屏幕上显示事件的DOM元素。它不会从fullCalendar的内部事件列表中删除任何事件,因此它将在下次呈现日历和/或事件时简单地重新绘制所有事件。如果我将true
作为第二个参数添加到addEvent()
,console会给我一个错误没有id为“true”的源。但是,当我将ID添加到源代码中并在addEvent()
中使用相同的ID作为第二个参数时,它似乎起了作用,事件不再加倍。非常感谢您的帮助,我对此表示感谢。事实上,它翻了一番可以归结为在服务器端源中拥有数据(每次月份变化时都会调用该源,以获取该月份的新事件)以及直接手动输入。我建议您不要将手动添加的事件标记为持久事件。是的,我也这么认为,但我不知道如何避免这种情况。您提到“不要将手动添加的事件标记为持久事件”。我在谷歌上搜索了一下,但在FC文档中找不到任何选项。你能多谈谈这个想法吗?就像我写的一样,我尝试使用$('.fc event')删除所有事件代码>,但手动添加的事件仍然存在。因此,此功能在fullCalendar 4及更高版本中的实现略有不同。我想我的话是针对旧版本的,所以我道歉。因此,请阅读并记下有关源
参数的注释-如果您a)使用事件源并为事件源提供ID,或b)只需将此值设置为true
,就可以将手动添加的事件与该源关联,然后fullCalendar将确保下次从服务器获取事件时,它还将删除手动添加的copyP.S<代码>$('.fc事件')。删除()
不会有帮助,因为这只会删除用于在屏幕上显示事件的DOM元素。它不会从fullCalendar的内部事件列表中删除任何事件,因此它将在下次呈现日历和/或事件时简单地重新绘制所有事件。如果我将true
作为第二个参数添加到addEvent()
,console会给我一个错误没有id为“true”的源。但是,当我将ID添加到源代码中并在addEvent()
中使用相同的ID作为第二个参数时,它似乎起了作用,事件不再加倍。非常感谢你的帮助,我很感激。
calendar.addEvent(event, 1);