我可以预防有冲突时间的事件吗?

时间:2013-04-04 00:09:10

标签: fullcalendar

如何防止有冲突时间的事件?是否有任何变量可以设置?

5 个答案:

答案 0 :(得分:12)

不,没有要设置的变量,但您可以使用clientEvents之类的内容来检索fullcalendar在内存中的事件。您可以在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 :(得分:1)

纠正重叠检查。

        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;
            }
        }

答案 2 :(得分:1)

你可以在celendar配置中添加eventOverlap:false, http://fullcalendar.io/docs/event_ui/eventOverlap/

答案 3 :(得分:1)

在事件对象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;
    }
  },

它不会让另一个事件覆盖已经放置的事件。

答案 4 :(得分:1)

这可以解决问题。它还可以处理重叠事件的大小

var calendar = new Calendar(calendarEl, {
      selectOverlap: false,
      eventOverlap: false
  }
});