如何在不等待数据库添加的情况下在全日历中添加事件
How add events in fullcalendar without wait for database adding
我想出了如何在全日历中快速添加事件,想法是添加到日历、显示并保存到数据库后,无需等待数据库,但是最近添加的事件在返回一周和回来时会重复.
将事件添加到日历的代码是这样的:
// First add the event to calendar, displaying almost instantly.
var idTemp = Math.floor(Math.random() * 100000) + 1;
var event = {
id: idTemp,
title: TextoEvento,
start: CalendarInfoSelect.start,
end: CalendarInfoSelect.end,
allDay: false,
tituloOriginal: TextoEvento,
backgroundColor: colorEvento,
textColor: colorEventoTexto
};
calendar.addEvent(event );
// Then, add to database:
$.ajax({
cache: false,
url: '@Url.Action("EventAddedTareaReciente", "CH")',
type: "POST",
dataType: 'json',
data: {
id: Idbd,
idAct: IdAct,
idProy: IdProy,
idProd: IdProd,
newStart: CalendarInfoSelect.startStr,
newEnd: CalendarInfoSelect.endStr,
ini: CalendarInfoSelect.start.toISOString(),
fin: CalendarInfoSelect.end.toISOString()
},
success: function (data) {
if (data.Id > 0) {
event = calendar.getEventById(idTemp);
// Here set id with database's one
event.setProp('id', data.Id);
}
else {
event = calendar.getEventById(idTemp);
event.remove();
}
},
error: function (xhr) {
event = calendar.getEventById(idTemp);
event.remove();
}
});
这里没有错误,它工作正常。
但是,当用户点击返回一周后又回到原来的一周时,事件就会重复。
如果用户以这种方式添加多个事件,则此事件在日历中会重复。但它们在数据库中不会重复当刷新浏览器 (F5) 时,显示完全没问题。
就像这样添加的事件在内存中变得粘滞。
任何帮助,想法?我找不到解决办法。也许还有另一种方法可以做到这一点。
我使用 FullCalendar Core Package v4.3.1
谢谢
根据https://fullcalendar.io/docs/v4/Calendar-addEvent,如果您为事件指定了一个事件源(从逻辑上讲,它应该与您从数据库接收事件时从中获取事件的源相同),那么当源是 re-fetched(例如当日历日期更改时)它将从日历中清除 locally-added 事件。
如果您在设置日历时没有定义特定的事件源,现在是时候稍微修改您的选项以支持它了 - 请参阅 https://fullcalendar.io/docs/v4/eventSources and https://fullcalendar.io/docs/v4/event-source-object
示例:
事件源在日历配置中定义:
eventSources: [{
id: 1,
url: '/events'
}]
手动添加到日历的事件与事件源关联:
calendar.addEvent(event, 1);
我想出了如何在全日历中快速添加事件,想法是添加到日历、显示并保存到数据库后,无需等待数据库,但是最近添加的事件在返回一周和回来时会重复.
将事件添加到日历的代码是这样的:
// First add the event to calendar, displaying almost instantly.
var idTemp = Math.floor(Math.random() * 100000) + 1;
var event = {
id: idTemp,
title: TextoEvento,
start: CalendarInfoSelect.start,
end: CalendarInfoSelect.end,
allDay: false,
tituloOriginal: TextoEvento,
backgroundColor: colorEvento,
textColor: colorEventoTexto
};
calendar.addEvent(event );
// Then, add to database:
$.ajax({
cache: false,
url: '@Url.Action("EventAddedTareaReciente", "CH")',
type: "POST",
dataType: 'json',
data: {
id: Idbd,
idAct: IdAct,
idProy: IdProy,
idProd: IdProd,
newStart: CalendarInfoSelect.startStr,
newEnd: CalendarInfoSelect.endStr,
ini: CalendarInfoSelect.start.toISOString(),
fin: CalendarInfoSelect.end.toISOString()
},
success: function (data) {
if (data.Id > 0) {
event = calendar.getEventById(idTemp);
// Here set id with database's one
event.setProp('id', data.Id);
}
else {
event = calendar.getEventById(idTemp);
event.remove();
}
},
error: function (xhr) {
event = calendar.getEventById(idTemp);
event.remove();
}
});
这里没有错误,它工作正常。 但是,当用户点击返回一周后又回到原来的一周时,事件就会重复。
如果用户以这种方式添加多个事件,则此事件在日历中会重复。但它们在数据库中不会重复当刷新浏览器 (F5) 时,显示完全没问题。
就像这样添加的事件在内存中变得粘滞。
任何帮助,想法?我找不到解决办法。也许还有另一种方法可以做到这一点。
我使用 FullCalendar Core Package v4.3.1
谢谢
根据https://fullcalendar.io/docs/v4/Calendar-addEvent,如果您为事件指定了一个事件源(从逻辑上讲,它应该与您从数据库接收事件时从中获取事件的源相同),那么当源是 re-fetched(例如当日历日期更改时)它将从日历中清除 locally-added 事件。
如果您在设置日历时没有定义特定的事件源,现在是时候稍微修改您的选项以支持它了 - 请参阅 https://fullcalendar.io/docs/v4/eventSources and https://fullcalendar.io/docs/v4/event-source-object
示例:
事件源在日历配置中定义:
eventSources: [{
id: 1,
url: '/events'
}]
手动添加到日历的事件与事件源关联:
calendar.addEvent(event, 1);