2013-12-20 17 views
2

为了避免重复的事件,我用这个函数:fullCalendar:如何在clientEvents中按日期过滤?

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

如果我的日历有很多事件,功能相当缓慢,从而提高速度,我认为这将是很好只是比较在当前视图中的事件,所以我希望我可以用clientEvents过滤功能是这样的:

var array = $('#calendar').fullCalendar('clientEvents', function(events){ return (event.start >= view_start && view_end > event.start)}); 

但是,这将返回所有事件。

注: 我宣布view_start & view_end为全局变量和ViewDisplay计算他们是这样的:

view_start = view.visStart; 
view_end = view.visEnd;  

我怎样才能得到这在当前视图中可见的事件。

+0

你要显示的具体时间范围内的事件,如每个月? 你能展示你如何获取你的活动? –

+0

我使用php文件从mysql数据库中获取事件,并使用'json_encode'返回json提要。 – Thiru

+0

所以你使用JSON添加你的事件,并且需要很长时间? 为什么你不过滤服务器端的事件,并在你的AJAX调用传递一个参数,告诉服务器你想要什么类型的事件? –

回答

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

在fullCalendar使用过滤器的大多数功能。

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

var array = $('#calendar').fullCalendar('clientEvents',function(event) 
    if(event.start > '1111-11-11')return true; 
    else return false; 
); 
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'))});