FullCalendar показва още връзка, която не е в ред по време

В FullCalendar, използвайки

eventLimit: 2

Ограничава броя на събитията, показани в месечния изглед до две на ден. След това се добавя връзка „покажи повече“, която отваря малък изскачащ прозорец, показващ всички събития. В месечния изглед събитията се показват по времеви ред, но в изскачането на още изскачане те се подреждат по идентификатора на събитието. Как мога вместо това да ги подредя по време в изскачащия прозорец?

http://jsfiddle.net/obsoyuL0/


person user4370541    schedule 17.01.2015    source източник
comment
Ако подреждането е по лична карта, защо не можете просто да поръчате отново вашите идентификационни карти?   -  person Ian Clark    schedule 17.01.2015
comment
В jsfiddle събитията се съхраняват в масив, но в действителното ми приложение те се връщат от база данни. Всеки идентификатор е ключ за данните в базата данни, така че ако някой добави събитие с по-ранно време след по-късно, то ще има по-голям идентификатор и ще наруши реда.   -  person user4370541    schedule 17.01.2015


Отговори (1)


Опитвам се да намеря приложено решение на вашия проблем, но безуспешно. Странно е, че получавате този резултат: ако погледнете изходния код на приставката, той трябва да подрежда събитията по началния час:

// fullcalendar.js
// A cmp function for determining which segments should take visual priority
// DOES NOT WORK ON INVERTED BACKGROUND EVENTS because they have no eventStartMS/eventDurationMS
function compareSegs(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)
        (seg1.event.title || '').localeCompare(seg2.event.title); // tie? alphabetically by title
}

Както и да е, имаше отворена заявка за проблем/функция относно това.

Едно решение, което измислих, е следното: ако идентификаторите не са важни от страна на клиента и могат да бъдат модифицирани, можете да подредите масива от събития по дата и съответно да промените идентификаторите:

function compare(a, b) {
  if (moment(a.start).isSame(b.start)) {
    return 0;
  }
  if (moment(a.start).isBefore(b.start)) {
    return -1;
  }

  return 1;
}

events.sort(compare);

for(var i = 0; i<events.length; i++) {
    events[i]['id']=i;
}

След това прехвърлете подредения масив към fullcalendar и събитията трябва да се показват подредени по началния час в изскачащия прозорец.

Fiddle

person acontell    schedule 17.01.2015
comment
Страхотен отговор, ако идентификаторите не са важни, така че благодаря! За съжаление идентификаторите от събитията се използват за друга функционалност, така че това не е идеално. - person user4370541; 17.01.2015
comment
Благодаря, това, което можете да направите, е да съхраните идентификатора в друга променлива в обекта, real_id например, и да промените id, за да подмамите fullcalendar. След това използвайте real_id в останалата част от приложението - person acontell; 17.01.2015