/ / Чи можу я запобігти подіям із конфліктним часом? - повний календар

Чи можу я запобігти подіям з часом конфлікту? - повний календар

Як я можу запобігти подіям із конфліктним часом? Чи є якась змінна для встановлення?

Відповіді:

11 за відповідь № 1

Ні, немає змінної для встановлення, але ви можете використовувати щось на зразок clientEvents який витягує події, які мають повноцінний календар в пам'яті. Ви можете скористатися функцією нижче в розділі eventDrop. У нижченаведеному випадку вона використовує функцію для фільтрування того, чи матиме подія перекриття чи ні.

function checkOverlap(event) {

var start = new Date(event.start);
var end = new Date(event.end);

var overlap = $("#calendar").fullCalendar("clientEvents", function(ev) {
if( ev == event)
return false;
var estart = new Date(ev.start);
var eend = new Date(ev.end);

return (Math.round(estart)/1000 < Math.round(end)/1000 && Math.round(eend) > Math.round(start));
});

if (overlap.length){
//either move this event to available timeslot or remove it
}
}

1 для відповіді № 2

Правильна перевірка перекриття.

        eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view) {
/// deny overlap of event
var start = new Date(event.start);
var end = new Date(event.end);

var overlap = $("#calendar").fullCalendar("clientEvents", function(ev) {
if( ev == event) {
return false;
}
var estart = new Date(ev.start);
var eend = new Date(ev.end);

return (
( Math.round(start) > Math.round(estart) && Math.round(start) < Math.round(eend) )
||
( Math.round(end) > Math.round(estart) && Math.round(end) < Math.round(eend) )
||
( Math.round(start) < Math.round(estart) && Math.round(end) > Math.round(eend) )
);
});
if (overlap.length){
revertFunc();
return false;
}
}

1 для відповіді № 3

Ви можете додати eventOverlap: false у конфигурації celendar, http://fullcalendar.io/docs/event_ui/eventOverlap/


1 для відповіді № 4

Додайте власні властивості в об’єкт події overlap:false наприклад, вашим об’єктом події буде

                 `{
title:"Event",
start: "2017-01-04T16:30:00",
end: "2017-01-04T16:40:00",
overlap:false
}`

Тепер замініть функцію selectOverlap,

selectOverlap: function(event) {
if(event.ranges && event.ranges.length >0) {
return (event.ranges.filter(function(range){
return (event.start.isBefore(range.end) &&
event.end.isAfter(range.start));
}).length)>0;
}
else {
return !!event && event.overlap;
}
},

Це не дозволить іншій події перекрити вже розміщену подію.