【问题标题】:eventRender not allowed to render overlapping or outside businessHourseventRender 不允许渲染重叠或超出 businessHours
【发布时间】:2015-04-15 13:31:36
【问题描述】:

我正在处理当前位于http://klanten.jebble.nl/nodots/fleskens/agenda.html 的日历

我已将 eventRender 连接到 dayClick 函数,该函数呈现 1.5 小时的事件,并且只能在空闲时间段和营业时间内拖动。

但是,如果您在另一个事件上单击 businessHours 之外的时间,它确实会在不应该重叠的地方重叠。

希望有人能告诉我要使用什么参数或函数,这样当我在工作时间以外点击或重叠当前事件时,它不会呈现或会在空闲时间段自动呈现。

$(document).ready(function() {
        $('#calendar').fullCalendar({
            /* Text and data config */
            lang: 'nl',
            defaultView: 'agendaWeek',
            titleFormat: 'MMMM',
            columnFormat: 'dd D',
            header: {
                left:   'prev',
                center: 'title',
                right:  'next'
            },
            buttonText: {
                prev: 'vorige week',
                next: 'volgende week'
            },

            /* Available hours and date stuff */
            weekends: false,
            businessHours: {
                start: '09:00', /* API Data */
                end: '18:00', /* API Data*/
                dow: [1,2] /* API Data */
            },
            eventConstraint: {
                start: '09:00', /* API Data */
                end: '18:00', /* API Data*/
                dow: [1,2] /* API Data */
            },
            minTime: '09:00',
            maxTime: '18:00',
            allDaySlot: false,
            monthNames: ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'],

            /* Styling */
            eventBackgroundColor: '#dff0f7',
            eventBorderColor: '#dff0f7',
            eventTextColor: '#35a0da',
            contentHeight: 'auto',
            eventOverlap: false,
            slotEventOverlap: false,
            selectOverlap: false,

            /*View Render (disable past weeks) */
            viewRender: function(currentView) {
                var minDate = moment()
                // Past
                if (minDate >= currentView.start && minDate <= currentView.end) {
                    $(".fc-prev-button").prop('disabled', true); 
                    $(".fc-prev-button").addClass('fc-state-disabled'); 
                }
                else {
                    $(".fc-prev-button").removeClass('fc-state-disabled'); 
                    $(".fc-prev-button").prop('disabled', false); 
                }
            },

            dayClick: function(date, jsEvent, view) {
                start = date.format();
                start = moment(start);

                var tmp = moment(start);

                var end = tmp.add(1.5, 'hours');

                $('#calendar').fullCalendar('removeEvents', 1)

                var newEvent = {
                    id: 1,
                    title: 'Ketelonderhoud',
                    start: start,
                    end: end,
                    backgroundColor: '#7db927',
                    borderColor: '#7db927',
                    textColor: '#fff',
                    editable: true,
                    durationEditable: false,
                };
                $('#calendar').fullCalendar('renderEvent', newEvent);
            },

            events: [
                {
                    id: 10,
                    title: 'bezet',
                    start: '2015-04-14T13:00:00',
                    end: '2015-04-14T14:30:00',
                }
            ]
        });

【问题讨论】:

    标签: jquery fullcalendar


    【解决方案1】:

    您不应该使用dayClick。有一个用于创建事件的内置选项称为selectable

    然后您可以使用selectOverlap 回调来限制选择。并在选择完成后调用 select 回调。如果您需要它是固定的时间量,请在将其添加为事件之前使用结束日期。示例JSFiddle

    否则需要手动检查。

    如果这样做,项目中的 eventsArray 循环需要更改。行:

    if (end.valueOf() > evStart && end.valueOf() < evEnd){
    

    没有做你想做的事。

    Fullcalendar 使用momentjs 作为日期。 &lt;&gt; 运算符不起作用。使用isBefore()isAfter()。比如:

    if (end.isAfter(evStart) && end.isBefore(evEnd)){
    

    【讨论】:

    • 无论所选区域如何,是否可以选择以固定时间跨度(1.5 小时)呈现事件?
    • @Jebble 当然。从用户体验的角度来看,这会很奇怪,因为您通常希望选择能给您选择的时间……但可以做到。我会添加它。
    • 它将用于计划维修人员到您家的日期和时间,这些约会有固定的持续时间,这就是原因。感谢您的帮助!
    • 感谢 Slicedtoad,这是有道理的。您能否添加一个如何选择固定时间跨度的示例?
    • @slicedtoad 就像一个魅力。谢谢!
    【解决方案2】:

    当您从 dayClick 回调手动创建它时,您需要检查您正在创建的事件。

    为了知道它是否与其他事件重叠,您可以查看Is there a way to prevent overlapping events in jQuery FullCalendar?

    【讨论】:

    • 这并没有改变任何行为。访客也不能选择任何东西。他们只能单击日历,之后使用我用来创建开始和结束时间的日期对象调用 eventRender。
    • @Jebble 我误解了你的问题,所以我更新了答案。
    • 我已经更新了我的代码并在代码中添加了一些语句。我提醒 canRender 变量查看新事件的开始或结束日期是否在现有事件中,但由于某种原因,它总是为真。你能看一下klanten.jebble.nl/nodots/fleskens/agenda.html的代码吗?
    • 我正在尝试实现与@Jebble 相同的目标,但我遇到了与 Jebble 相同的问题(在我的上方发表评论)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多