【问题标题】:Alternative option for eventAfterAllRender in FullCalendar v5.xFullCalendar v5.x 中 eventAfterAllRender 的替代选项
【发布时间】:2021-01-24 20:47:05
【问题描述】:

在 FullCalendar v3 中,有一个选项可以在加载所有事件后捕获。

eventAfterAllRender

它似乎在 v4 中被删除。正如这里所说: https://fullcalendar.io/docs/v4/upgrading-from-v3

这里有一个代码 sn-p 来准备 v5 中的演示日历。

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8' />
        <link href='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.1/main.min.css' rel='stylesheet' />
        <script src='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.1/main.min.js'></script>
        <script>

            document.addEventListener('DOMContentLoaded', function () {
                var calendarEl = document.getElementById('calendar');

                var calendar = new FullCalendar.Calendar(calendarEl, {
                    headerToolbar: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
                    },
                    initialDate: '2020-09-12',
                    navLinks: true, // can click day/week names to navigate views
                    businessHours: true, // display business hours
                    editable: true,
                    selectable: true,
                    events: [
                        {
                            title: 'Business Lunch',
                            start: '2020-09-03T13:00:00',
                            constraint: 'businessHours'
                        },
                        {
                            title: 'Meeting',
                            start: '2020-09-13T11:00:00',
                            constraint: 'availableForMeeting', // defined below
                            color: '#257e4a'
                        },
                        {
                            title: 'Conference',
                            start: '2020-09-18',
                            end: '2020-09-20'
                        },
                        {
                            title: 'Party',
                            start: '2020-09-29T20:00:00'
                        },

                        // areas where "Meeting" must be dropped
                        {
                            groupId: 'availableForMeeting',
                            start: '2020-09-11T10:00:00',
                            end: '2020-09-11T16:00:00',
                            display: 'background'
                        },
                        {
                            groupId: 'availableForMeeting',
                            start: '2020-09-13T10:00:00',
                            end: '2020-09-13T16:00:00',
                            display: 'background'
                        },

                        // red areas where no events can be dropped
                        {
                            start: '2020-09-24',
                            end: '2020-09-28',
                            overlap: false,
                            display: 'background',
                            color: '#ff9f89'
                        },
                        {
                            start: '2020-09-06',
                            end: '2020-09-08',
                            overlap: false,
                            display: 'background',
                            color: '#ff9f89'
                        }
                    ]
                });

                calendar.render();
            });

        </script>
        <style>

            body {
                margin: 40px 10px;
                padding: 0;
                font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
                font-size: 14px;
            }

            #calendar {
                max-width: 1100px;
                margin: 0 auto;
            }

        </style>
    </head>
    <body>

        <div id='calendar'></div>

    </body>
</html>

Codepen:https://codepen.io/wetruck/pen/poEXEve

在 v5 中加载所有事件后是否有任何选项可以执行操作?

我实际上使用的是 html 加载器。它与页面加载一起显示。但是在加载完所有事件后,它应该被删除。

【问题讨论】:

  • 不,没有。加载完所有事件后,您究竟需要做什么?
  • ???我问了一个问题。你能回答吗?
  • 不,你没有。在您最初的问题中,您已经说过您需要在所有事件加载后执行操作。我在问这个动作到底是什么?以防万一也许有另一种方法可以实现您的总体目标。如果我们了解您想要做什么以及原因,那么也许我们可以帮助您找到其他解决方案。
  • 好的。那么这对你的申请有什么帮助呢?好像没什么大不了的。如果它不再存在,那又如何?在上面的示例代码中,事件是硬编码的,因此无论如何它们都会立即加载。您是否可能从真实应用程序中的 JSON 提要中获取它们?
  • 如果您所做的只是将其记录到控制台,为什么会有大问题?那没有意义。控制台日志记录仅用于开发目的。您可以查看开发工具中的网络选项卡以查看 AJAX 请求需要多长时间,但这当然没有考虑渲染时间。在实际应用程序中,您这样做还有其他目的吗?因为正如我最初所说,答案是否定的,在 fullCalendar 5 中没有直接替代此功能。如果您真的需要解决方法,则必须提出一个真正的用例。

标签: javascript php jquery fullcalendar fullcalendar-5


【解决方案1】:

对于这种情况,如果您有一个要显示和隐藏的加载程序,请参阅loading 回调选项以了解可以完成这项工作的内容 - 您可以使用该回调使加载程序在 AJAX 部分时显示/隐藏的任务开始和停止。

例如

loading: function( isLoading ) {
  if (isLoading == true) {
    //show your loader
  } else {
    //hide your loader
  }
}

与旧的 eventAfterAllRender 不同,它在 AJAX 请求的开始/结束时开始和停止,并且不包括 fullCalendar 对事件的呈现,但这通常非常快,除非您下载的事件数量荒谬一个时间段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2021-12-21
    相关资源
    最近更新 更多