2013-10-22 68 views
0

我有一個通過fullcalendar.js製作的日曆 它具有可以通過拖放添加到其中的外部日曆事件。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部分設置爲true。當這是「錯誤」時,只有新事件在改變月份時消失 - 這是預期的行爲。

但是,如果粘性設置爲「true」,所有事件消失,無論它們是否在初始設置中。 我得到一個控制檯錯誤說「events [i]爲null」,這似乎表明日曆事件正在超出範圍,但我不知道如何。

似乎只發生在幾個月之間的滾動;當滾動數週時,一切似乎都是正常的,直到你碰到一個月的邊緣 - 然後再次遇到錯誤

回答

0

修正: 問題是,在渲染後,正在更改dropped2事件。

有限法刪除循環引用(例如,A有孩子B,B有孩子C,C有孩子A)。

我沒有意識到(雖然我應該有,因爲是有限的方法背後的動機)是渲染事件創建fullCalendar所需的循環引用。

正如我在調用finitise after渲染時,事件的結構對於在日曆中更改月份時自動發生的後續渲染無效。

在renderEvent調用之前調用finitise可以解決此問題,因爲renderEvent會將循環引用添加到有限制的對象(並且不會因s​​ocketio導致有問題,因爲finitise對象已通過iosocket發送)。