fullCalendar:如何在clientEvents中按日期过滤?

时间:2013-12-20 12:37:19

标签: javascript jquery fullcalendar

为避免重叠事件,我使用此功能:

    function isOverlapping(event){
    var array = $('#calendar').fullCalendar('clientEvents');
    for(i in array){
      if(array[i].id != event.id){
        if(array[i].allDay || event.allDay){
          if(array[i].start.getDate() == event.start.getDate()){
            if(array[i].start.getMonth() == event.start.getMonth()){
              return true;
            }
          }
        }
        else{
          if(event.end > array[i].start && event.start < array[i].end){ return true;}
        }
      }
    }
      return false;
  }

如果我的日历有很多事件,那么功能很慢,为了提高速度,我认为只比较当前视图中的事件会很好,所以我希望我可以使用{{1像这样过滤函数:

clientEvents

但这会返回所有事件。

注意: 我已宣布 var array = $('#calendar').fullCalendar('clientEvents', function(events){ return (event.start >= view_start && view_end > event.start)}); &amp; view_start作为全局变量,并在ViewDisplay中计算它们,如下所示:

view_end

如何获取当前视图中可见的事件。

3 个答案:

答案 0 :(得分:1)

fullcalendar中没有内置过滤器,你必须自己制作。你唯一能做的就是做你正在做的事情:) ...使用你自己的过滤功能。

我这样做是为了过滤它们,但这是客户端的,所以过滤将成为客户端...这可能是一个问题,但对于我的特定解决方案,它应该是。

这是我的例子:

function getCalendarEvents(filter){

        var events = new Array();      
            if(filter == null)
            {
                events = calendar.fullCalendar('clientEvents');
            }
            else
            {
                events = getEventsByFilter(filter);                 
            }           
        return events;                 
    }

过滤事件功能:

function getEventsByFilter(filter){        
        var allevents = new Array();
        var filterevents = new Array();
        allevents = getCalendarEvents(null);

        for(var j in allevents){ 
            if(allevents[j].eventtype === filter)
            {
                filterevents.push(allevents[j]);
            }
        }           

        return filterevents;
    }

答案 1 :(得分:1)

您想要使用的oneliner的问题是event.start实际上是一个对象。我能够使用类似的东西:

moment(calEvent.start).format('YYYY-MM-DD')

因此,对于您的情况,请尝试:

var array = $('#calendar').fullCalendar('clientEvents', function(events){ return (moment(events.start).format('YYYY-MM-DD') >= view_start && view_end > moment(events.start).format('YYYY-MM-DD'))});

答案 2 :(得分:-2)

fullCalendar中的大多数函数都使用过滤器。

这些过滤器可能是一个数字,可以通过ID过滤,也可以是返回true或false的函数,具体取决于您过滤的内容。

var array = $('#calendar').fullCalendar('clientEvents',function(event)
    if(event.start > '1111-11-11')return true;
    else return false;
);