FullCalendar: как сортировать и отображать события на Day of MonthView? - PullRequest
1 голос
/ 02 апреля 2011

Все события в дневном интервале ежемесячного просмотра сортируются по времени начала, то есть час начала события 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. Неактивная задача-2 7:00 утра
  6. InactiveTask-3 23:30 PM

Возможно ли это в fullCalendar?

Ответы [ 3 ]

9 голосов
/ 11 апреля 2011

Ваш запрос должен будет напрямую исправить полный календарный код.Это обязательно, потому что fullcalendar не предоставляет эту функцию для внешнего мира.

Я проверил свой ответ с версией 1.4.11, но, глядя на ветку 1.5 на github, видно, что она должна быть такой же.

Патчируемая функция: 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 - diff, потому что вы хотите, чтобы IsActive: true ПЕРЕД IsActive: false)

Обратите внимание, что segCmp вызывается при разделении / упорядочении событий и, следовательно, будет применяться во всех представлениях.С уважением,

Паскаль

3 голосов
/ 05 мая 2011

когда эта функция будет реализована, она решит вашу проблему: http://code.google.com/p/fullcalendar/issues/detail?id=364

0 голосов
/ 08 декабря 2015

Если вы хотите полностью переопределить сортировку по дате начала для allDaySlot, месяц, основные представления. Например, отсортировать их по цвету.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...