为了避免重叠事件,我使用这个函数:
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;
如何获取当前视图中可见的事件。
你想使用的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'))});
全日历中没有内置过滤器,您必须自己制作它们。你唯一能做的就是做你正在做的事情:)......使用您自己的筛选器函数。
这就是我过滤它们的方法,但这是客户端,所以过滤将变成客户端......这可能是一个问题,但对于我的特定解决方案来说就足够了。
这是我的例子:
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;
}
fullCalendar中的大多数函数都使用过滤器。
这些筛选器可能是一个数字,并按 ID 进行筛选,也可以是返回 true 或 false 的函数,具体取决于要筛选的内容。
var array = $('#calendar').fullCalendar('clientEvents',function(event)
if(event.start > '1111-11-11')return true;
else return false;
);