全日历事件排序不适用于我

时间:2019-03-08 00:11:39

标签: javascript sorting fullcalendar

使用fullcalendar v3.8.2。我正在努力整理事件。我已经阅读(并重新阅读了)stackoverflow答案here。我正在使用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 个答案:

答案 0 :(得分:2)

如果您为eventOrder提供一个函数,那么,当您链接到状态的eventOrder docs时,它接受两个输入参数(需要比较两个事件,排序),并且还告诉您应该返回-101作为比较的结果-作为指示应该输入两个输入项中的哪一个放在第一位。

如果第一个事件应该在列表中的第一位,则返回-1。如果相反,则返回1,如果相等,则返回0。其中的逻辑应与文档中为本地JS数组排序功能提供的示例代码非常相似-参见此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description < / p>

您的逻辑当前将只为碰巧在未排序列表中排在第一位的事件返回“排序”值。这根本没有做任何比较,也没有提供调用代码期望的所有可能值(即,您只返回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。顺便说一句,您上面提供的示例数据并没有多大用处,因为它们在不同的日期,但自定义排序将不适用。显然,在这种情况下,我可以轻松地对其进行更改以创建演示,但是提供一个实际再现该问题的示例会更有意义:-)