0

我有一个通过 fullcalendar.js 制作的日历。它有外部日历事件,您可以通过拖放将其添加到其中。

我的问题是当我回到一个月然后回到我刚才看的那个月份时,事件就会消失。

这是日历初始化代码:

            $('#calendar').fullCalendar({       
                editable: true,                  
                header: {
                    left: 'prev,next today',      
                    center: 'title',              
                    right: 'month,agendaWeek'     
                },                               
                events: //some events
                ignoreTimezone: false,                              
                eventDrop: function(event,dayDelta,minuteDelta,allDay,revertFunc){
                    //do stuff                        
                },                                
                eventResize: function(event,dayDelta,minuteDelta,revertFunc,jsEvent,ui, view) {
                    //do stuff
                },
                droppable: true,
                drop: function(date, allDay, jsEvent, ui) {
                    var $this = $(this);
                    var dropped = $this.data('eventobject');
                    var dropped2 = $.extend({} , dropped);
                    dropped2.title = $this.html();
                    dropped2.start = date;
                    dropped2.allDay = (dropped.allDay || allDay);
                    $parent.text(renderDate(date, "MDY", "/"));

                    $('#calendar').fullCalendar('renderEvent', dropped2, true);
                    iosocket.emit("calendar", {calEvent: finitise(dropped2)});
                    $this.remove();
                }
            });

您会注意到我在 renderEvent 部分中将“sticky”设置为 true。当这是“错误”时,只有新事件在更改月份时才会消失 - 这是预期的行为。

但是,将sticky 设置为“true”时,所有事件都会消失,无论它们是否在初始集中。我收到一个控制台错误,提示“events[i] is null”,这似乎向我表明日历事件超出了范围,但我不知道如何。

似乎只在月份之间滚动时发生;滚动数周时,一切似乎都很正常,直到您到达一个月的边缘-然后再次遇到错误

4

1 回答 1

0

修复:问题是渲染后 drop2 事件被更改。

finitise 方法删除循环引用(例如 A 有子 B,B 有子 C,C 有子 A)。

我没有意识到(尽管我应该知道,因为这是 finitise 方法背后的动机)是渲染事件创建了 fullCalendar 所需的循环引用。

正如我在渲染后调用 finitise 一样,事件的结构对于在日历中更改月份时自动发生的后续渲染无效。

在 renderEvent 调用之前调用 finitise 可以解决这个问题,因为 renderEvent 会将循环引用添加到 finitised 对象(并且不会导致 socketio 出现问题,因为 finitise 对象已经通过 iosocket 发送)。

于 2013-10-22T05:55:29.210 回答