сортировка событий fullcalendar у меня не работает - PullRequest
0 голосов
/ 08 марта 2019

Использование fullcalendar v3.8.2. Я изо всех сил пытаюсь заставить мои события сортироваться. Я прочитал (и перечитал) ответ на стеке здесь . Я использую evenOrder и пробовал различные варианты, но всегда получаю результаты, как на скриншоте ниже. Это события "весь день". Это календарь запуска лодок, и я всегда хочу показывать «путы» перед «выносами».

Очистить события не упорядочены по названию, и при этом они не упорядочены ни одним из опций eventOrder, которые я пробовал.

screen shot

В настоящее время мой код выглядит так:

  $calendar.fullCalendar({
    eventOrder: function(e) {
      return e.miscProps.sort;
    },

С данными, которые выглядят так:

{start: "2019-01-02", title: "30 put ins", className: "putin", sort: "0"}
{start: "2019-01-16", title: "1 take outs", className: "takeout", sort: "1"}

Событие "putin" - это всегда sort:0, а "takout" - всегда sort:1. eventOrder: function() вызывается и корректно возвращает 0 или 1.

Спасибо.

1 Ответ

2 голосов
/ 08 марта 2019

Если вы предоставите функцию для eventOrder, то, как eventOrder docs , который вы связали с состоянием, она принимает два входных параметра (два события, которые необходимо сравнить иотсортировано), и вам также говорят, что он должен вернуть либо -1, 0, либо 1 в результате сравнения - как указание того, какой из двух входных элементов должен быть помещен первым.

Если первое событие должно быть первым в списке, вернуть -1.Если обратное, то верните 1, если они равны, тогда верните 0. Логика в нем должна быть очень похожа на пример кода, предоставленный в документации для встроенной функции сортировки массива JS - см. Здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description

Ваша логика в настоящий момент будет просто возвращать значение "sort" для любого события, которое произойдет первым в несортированном списке.Это не делает никакого вида сравнения вообще, и также не предоставляет полный диапазон возможных значений, ожидаемых вызывающим кодом (т.е. вы только когда-либо возвращаете 0 или 1, никогда -1 - но даже если вы сделали это,не обязательно имеет смысл).

Функцией рабочего сравнения будет:

eventOrder: function(a, b) {
  var result = 0;
  if (a.miscProps.sort < b.miscProps.sort) result = -1; //event a should be listed first
  else if (a.miscProps.sort > b.miscProps.sort) result = 1; //event b should be listed first
  return result;
},

Демонстрация: http://jsfiddle.net/c9upo8w2/1/

Но ... на самом деле вам не нужнонасколько я вижу, напишите пользовательскую функцию для этого, потому что вы упорядочиваете по прямой возрастающей последовательности чисел только в поле «сортировка».Там нет сложных расчетов, которые будут сделаны.Указание поля, в котором будет производиться сортировка, будет отлично работать - остальное сделает fullCalendar.Опять же, в документации, которую вы связали, вы заявляете, что если вы укажете имя поля в качестве опции «eventOrder», то оно будет сортировать (в противном случае равно) события в порядке возрастания по этому полю.Итак:

eventOrder: "sort"

- это единственное, что вам нужно написать.

Демонстрация: http://jsfiddle.net/c9upo8w2/


PS.Приведенное выше не очень полезно, потому что они все равно в разные дни, поэтому пользовательская сортировка не будет применяться.Очевидно, что в этом случае я легко смог изменить его, чтобы создать демки, но было бы более разумно привести пример, который на самом деле воспроизводит проблему: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...