全日历事件排序对我不起作用
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 -1
、0
或 1
作为比较的结果 - 作为指示应该先放置两个输入项中的哪一个。
如果第一个事件应该是列表中的第一个,则 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。顺便说一句,您上面提供的示例数据没有多大用处,因为它们无论如何都在不同的日子,因此自定义排序将不适用。显然,在这种情况下,我可以很容易地更改它以创建演示,但提供一个实际重现问题的示例更有意义:-)
使用 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 -1
、0
或 1
作为比较的结果 - 作为指示应该先放置两个输入项中的哪一个。
如果第一个事件应该是列表中的第一个,则 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。顺便说一句,您上面提供的示例数据没有多大用处,因为它们无论如何都在不同的日子,因此自定义排序将不适用。显然,在这种情况下,我可以很容易地更改它以创建演示,但提供一个实际重现问题的示例更有意义:-)