全日历事件排序对我不起作用

fullcalendar event sorting not working for me

使用 fullcalendar v3.8.2. I'm struggling with getting my events to sort. I've read (and re-read) the Whosebug answer here. I'm using the evenOrder 并尝试了各种选项,但总是得到如下截图所示的结果。这些是 "all day" 事件。这是一个船下水日历,我总是想在 "take outs" 之前显示 "put ins"。

很明显,这些事件不是按标题排序的,也不是按我尝试过的任何 eventOrder 选项排序的。

目前我的代码如下所示:

  $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 .

谢谢。

如果您为 eventOrder 提供函数,那么,作为您链接到状态的 eventOrder docs,它接受 两个 输入参数(这两个事件需要进行比较和排序),并且您还被告知它应该 return -101 作为比较的结果 - 作为指示应该先放置两个输入项中的哪一个。

如果第一个事件应该是列表中的第一个,则 return -1。如果相反,则 return 1,如果它们相等,则 return 0。其中的逻辑应该与本机 JS 数组排序函数的文档中提供的示例代码非常相似 - 请参阅这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description

您的逻辑目前只会 return "sort" 恰好在未排序列表中排在第一位的事件的值。这根本没有进行任何类型的比较,它也没有提供调用代码期望的全部可能值(即你只 return 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/

但是...据我所知,实际上您不需要为此编写自定义函数,因为您在 "sort" 字段中按数字的升序非常直接地排序独自的。无需进行复杂的计算。指定要排序的字段将完美地完成这项工作 - fullCalendar 将完成剩下的工作。您链接的文档再次指出,如果您提供字段名称作为 "eventOrder" 选项,那么它将按该字段按升序对(否则相等)事件进行排序。所以:

eventOrder: "sort"

是您唯一需要写的东西。

演示:http://jsfiddle.net/c9upo8w2/


P.S。顺便说一句,您上面提供的示例数据没有多大用处,因为它们无论如何都在不同的日子,因此自定义排序将不适用。显然,在这种情况下,我可以很容易地更改它以创建演示,但提供一个实际重现问题的示例更有意义:-)