FullCalendar:如何排序&在MonthView日显示事件?

时间:2011-04-02 18:44:08

标签: javascript jquery fullcalendar

每月视图日间位置的所有事件都根据开始时间排序,即事件开始时间0-23,顶部0小时和底部23小时。

但是我希望在活动任务列表顶部显示活动(event.IsActive == true)任务,将显示非活动(event.IsActive == false)任务,按开始时间0-23排序。

示例:

  1. ActiveTask-1 12:00 AM
  2. ActiveTask-2 3:00 AM
  3. ActiveTask-3 21:45 PM
  4. InactiveTask-1 12:00 AM
  5. InactiveTask-2 7:00 AM
  6. InactiveTask-3 23:30 PM
  7. 这可以在fullCalendar中使用吗?

3 个答案:

答案 0 :(得分:9)

您的请求需要直接修补fullcalendar代码。 这是强制性的,因为fullcalendar不会将此功能暴露给外界。

我确实用版本1.4.11检查了我的回复,但是查看github上的1.5分支显示它应该是相同的。

要修补的函数是segCmp,(在src/util.js中找到源版本,或者只是在fullcalendar.js中的文件末尾附近)

原始版本是:

function segCmp(a, b) {
  return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start);
}

修补后的版本应如下所示:

function segCmp(a, b) {
  var activeDiff = ((b.event.IsActive || false) - (a.event.IsActive || false));
  if (activeDiff != 0) return activeDiff;
  return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start);
}

我只是检查事件是否具有不同的IsActive状态并返回diff,如果没有diff,则保留先前的算法。 (注意b - 一个差异,因为你想要IsActive:在IsActive之前是真的:false)

请注意,在拆分/排序事件时会调用segCmp,因此将适用于所有视图。

最诚挚的问候,

帕斯卡

答案 1 :(得分:3)

实现此功能后,它可以解决您的问题: http://code.google.com/p/fullcalendar/issues/detail?id=364

答案 2 :(得分:-1)

如果要完全覆盖allDaySlot,month,basics视图的开始日期排序。 例如,按颜色对它们进行排序。

1.初始化eventOrder以进行着色。 (你正在使用的html / php文件)

eventOrder: 'color,start'

2.更改compareSegs功能。 (fullcalendar.js)

// original function
compareSegs: function(seg1, seg2) {
    return seg1.eventStartMS - seg2.eventStartMS || // earlier events go first
        seg2.eventDurationMS - seg1.eventDurationMS || // tie? longer events go first
        seg2.event.allDay - seg1.event.allDay || // tie? put all-day events first (booleans cast to 0/1)
        compareByFieldSpecs(seg1.event, seg2.event, this.view.eventOrderSpecs);
}

// custom function
compareSegs: function(seg1, seg2) {
    if(this.view.name=="basicWeek"){ // ordering events by color in ListView
    return seg2.event.allDay - seg1.event.allDay || // tie? put all-day events first (booleans cast to 0/1)
        compareByFieldSpecs(seg1.event, seg2.event, this.view.eventOrderSpecs);
    }
    else{
        return seg1.eventStartMS - seg2.eventStartMS || // earlier events go first
                    seg2.eventDurationMS - seg1.eventDurationMS || // tie? longer events go first
                    seg2.event.allDay - seg1.event.allDay || // tie? put all-day events first (booleans cast to 0/1)
                    compareByFieldSpecs(seg1.event, seg2.event, this.view.eventOrderSpecs);
    }
}

在这种情况下,我只想在" basicVeek"中按颜色对事件进行排序。视图。 然后我删除了eventStartMS& eventDurationMS测试。

删除:

seg1.eventStartMS - seg2.eventStartMS || // earlier events go first
seg2.eventDurationMS - seg1.eventDurationMS || // tie? longer events go first