Javascript 全日历。从外部列表中删除拖动的事件

Javascript 全日历。从外部列表中删除拖动的事件,javascript,fullcalendar,fullcalendar-4,Javascript,Fullcalendar,Fullcalendar 4,我使用的是Fullcalendar 4,但在检索事件时遇到问题。我正在使用下拉菜单更改事件源,但我只能重新提取存储在json中的事件,而不能重新提取动态拖动的事件。我正在使用以下代码 calendar.destroy(); var eventSources = calendar.getEventSources(); var len = eventSources.length; for (var i = 0; i < len; i++) { eventSources[i].remove()

我使用的是Fullcalendar 4,但在检索事件时遇到问题。我正在使用下拉菜单更改事件源,但我只能重新提取存储在json中的事件,而不能重新提取动态拖动的事件。我正在使用以下代码

calendar.destroy();
var eventSources = calendar.getEventSources();
var len = eventSources.length;
for (var i = 0; i < len; i++) { 
eventSources[i].remove(); 
}
var url = './demo2/contents/calendar/get.php?source='+source;
calendar.addEventSource(url);
calendar.refetchEvents();
calendar.render();
外部列表是使用以下代码生成的,我试图指定源位置,但在从外部列表拖放时似乎不起作用:

var initDrag = function(el,value) {

 var eventObject = {

 id: el.attr("data-id"),
 startEditable: true,
 allDay: false,
 durationEditable: true,
 title: $.trim(el.text()), // use the element's text as the event title
 stick: true, // maintain when user navigates (see docs on the renderEvent method)
 classNames: [el.attr("data-color"),],
 description: 'Lorem ipsum dolor eius mod tempor labore',
 source: 'planificacion'
 };

 // store the Event Object in the DOM element so we can get to it later
 el.data('event', eventObject);

 };

谢谢ADyson你解决了我的问题。这个解决方案奏效了

eventReceive: function(info) { // called when a proper external event is dropped

 var evt = info.event;
 evt.remove();
 var newEvent = {};
 //clone the object - doesn't work if we just pass evt straight to the addEvent method
 for (prop in evt) {
 newEvent[prop] = evt[prop];
 }

 calendar.addEvent(newEvent,'planificacion');

}

如果在将拖动的事件添加到日历时未将其与事件源关联,则它们将存在于任何事件源之外,您必须直接删除它们。您可以使用它们获取所有事件,或者获取特定事件(如果您知道ID),并删除特定事件。P.S。如果要从动态源(如URL)重新提取事件,通常不需要销毁日历、删除事件源并重新创建它。如果URL可以更改,那么如果您遵循此模式,则可以为fullCalendar设置动态参数,以便在每次获取事件时收集并附加到URL中-请参阅链接页面中的“动态extraParams参数”部分。这样,您只需调用refetchEvents方法,fullCalendar就可以完成其余的工作。即使出于某种原因您仍然希望手动添加/删除事件源,销毁/渲染步骤也绝对是多余的。refetchEvents将导致事件被重新渲染,但实际上不需要重新渲染整个日历。我对此进行了一次尝试。只有通过有点笨拙的解决方法,才有可能做到这一点——您必须等待事件被接收,然后将其从日历中删除,对其进行属性克隆,然后通过addEvent方法再次将其添加回日历,并将所需的事件源指定为第二个参数。addEvent似乎是唯一可以成功将事件与源关联的方法,除了在该源的提要中实际交付事件之外。该方法的演示:。将几个事件拖到日历上,然后按remove event source(移除事件源)按钮,您将看到拖动的事件与原始事件源数据一起被移除。对我来说,这个过程是必要的,这让我感觉像是fullCalendar功能集中的一个小漏洞。我已经更新到fullCalendar v5,并且再次遇到了这个问题。我只能通过手动添加addEvent使其工作。复制完整对象不起作用。。。我不明白为什么。。calendar.addEvent{id:info.event.id,title:info.event.title,start:starttime,Day:true,},source;
eventReceive: function(info) { // called when a proper external event is dropped

 var evt = info.event;
 evt.remove();
 var newEvent = {};
 //clone the object - doesn't work if we just pass evt straight to the addEvent method
 for (prop in evt) {
 newEvent[prop] = evt[prop];
 }

 calendar.addEvent(newEvent,'planificacion');

}