2013-03-26 215 views
1

你好,我試圖避免FullCalendar應用程序中的重疊事件。我定義了回調函數eventDrop,以便檢查是否有重疊事件,並通過相應地更改event.startevent.end,然後調用.fullCalendar('updateEvent', event)將當前移動的事件移動到重疊事件的末尾。避免FullCalendar中的事件疊加

這是我的代碼,moment調用的是http://momentjs.com/docs/這是一個JavaScript的時間處理設施庫,我不認爲這是問題的原因。如果我對event.start = start; event.end = end做了評論,那麼所有的工作都正常。如果我不這樣做,它會以完全相同的方式打破,無論我是否撥打updateEvent。會發生什麼事情是:事件會移動到前一個事件的末尾,但如果我稍後嘗試向前移動事件(在當天晚些時候向空的空間移動),則以前的事件會被直觀地擴展,直到事件的新開始當前正在修改的事件。

self.collection是骨幹集,所以調用此代碼只是event.start=位評論顯示重疊的事件,但如果我刷新頁面,則該事件在他們正確的位置上顯示(不重疊)

eventDrop: function(event, dayDelta, 
        minuteDelta, allDay, 
        revertFunc, jsEvent, ui, view) { 
    var start = moment(event.start); 
    var end = moment(event.end); 
    var overlap = self.calendar.fullCalendar('clientEvents', function(ev) { 
     if(ev == event) 
      return false; 
     var estart = moment(ev.start); 
     var eend = moment(ev.end); 
     return estart.unix() < end.unix() && eend.unix() > start.unix(); 
    }); 
    if(overlap.length) { 
     overlap = overlap[0]; 
     var estart = moment(overlap.start); 
     var eend = moment(overlap.end); 
     var duration = eend - estart; 
     start = eend; 
     end = start.clone(); 
     end.add(duration); 
     event.start = start.toDate(); 
     event.end = end.toDate(); 
     self.calendar.fullCalendar('updateEvent', event); 
    } 
    event.model.save({start: start.unix(), end: end.unix()}); 
}, 

回答

1

好的,找到了問題。

這行

start = eend; 

應該

start = eend.clone(); 

因爲在moment對象包裝它不這樣做,它只是不斷的引用,它設置新移動事件的start日期相同Date對象作爲overlap.end

0

你有另一個錯誤,時間應該是

var duration = end - start; 

,因爲在你的方法,它計算的重疊事件,而不是一個你剛搬到

+0

的持續時間,是的,我發現這個問題,當我終於固定另一個=) – Lacrymology 2013-03-29 18:07:43