You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FullCalendar dayGridMonth视图按resourceId排序事件而非时间轴?

问题:FullCalendar dayGridMonth视图按resourceId排序事件

我希望在FullCalendar的dayGridMonth视图中,按resourceId(资源ID)对事件进行排序,而非默认的时间轴排序。

我的事件数据如下:

[
  { title: 'Event 1', start: '2024-02-01 09:00:00', resourceId: 'resource1' },
  { title: 'Event 2', start: '2024-02-01 10:00:00', resourceId: 'resource1' },  
  { title: 'Event 3', start: '2024-02-01 11:00:00', resourceId: 'resource2' },  
  { title: 'Event 4', start: '2024-02-01 12:00:00', resourceId: 'resource2' },  
  { title: 'Event 5', start: '2024-02-01 13:00:00', resourceId: 'resource1' },  
  { title: 'Event 6', start: '2024-02-01 14:00:00', resourceId: 'resource1' }
]

当前事件显示效果:

2024-02-01  
Event 1 id:1  
Event 2 id:1  
Event 3 id:2  
Event 4 id:2  
Event 5 id:1  
Event 6 id:1

期望的排序后效果:

2024-02-01  
Event 1 id:1  
Event 2 id:1  
Event 5 id:1  
Event 6 id:1  
Event 3 id:2  
Event 4 id:2

查阅FullCalendar官方文档未找到实现方法,请问该如何实现?


解决方案

可以利用FullCalendar的eventOrder配置项实现自定义排序逻辑,具体步骤如下:

  1. 基础配置:按resourceId排序
    在FullCalendar初始化配置中,设置eventOrder为'resourceId',事件会先按resourceId分组排序,同resourceId下默认按start时间排序(符合需求):
document.addEventListener('DOMContentLoaded', function() {
  var calendarEl = document.getElementById('calendar');
  var calendar = new FullCalendar.Calendar(calendarEl, {
    plugins: ['dayGrid'],
    initialView: 'dayGridMonth',
    eventOrder: 'resourceId', // 按resourceId排序
    events: [
      { title: 'Event 1', start: '2024-02-01 09:00:00', resourceId: 'resource1' },
      { title: 'Event 2', start: '2024-02-01 10:00:00', resourceId: 'resource1' },  
      { title: 'Event 3', start: '2024-02-01 11:00:00', resourceId: 'resource2' },  
      { title: 'Event 4', start: '2024-02-01 12:00:00', resourceId: 'resource2' },  
      { title: 'Event 5', start: '2024-02-01 13:00:00', resourceId: 'resource1' },  
      { title: 'Event 6', start: '2024-02-01 14:00:00', resourceId: 'resource1' }
    ]
  });
  calendar.render();
});
  1. 自定义排序函数(复杂场景适用)
    如果需要更灵活的排序规则(比如resourceId的自定义顺序),可以给eventOrder传入排序函数:
eventOrder: function(eventA, eventB) {
  // 先比较resourceId
  if (eventA.resourceId < eventB.resourceId) {
    return -1;
  }
  if (eventA.resourceId > eventB.resourceId) {
    return 1;
  }
  // 同resourceId下按start时间排序
  return new Date(eventA.start) - new Date(eventB.start);
}

配置后,dayGridMonth视图中的事件会按resourceId分组显示,同组内保持时间顺序,完全符合期望效果。


内容的提问来源于stack exchange,提问作者Automaton Saltavita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:21:35