[英]Avoid event superposition in FullCalendar
您好,我正在嘗試避免FullCalendar
應用中的事件重疊。 我已經定義了eventDrop
回調,以便它檢查是否有任何重疊的事件,並通過相應地更改event.start
和event.end
,然后調用.fullCalendar('updateEvent', event)
。
這是我的代碼, moment
調用是針對http://momentjs.com/docs/的 ,這是一個用於javascript的時間處理工具庫,我認為這不是問題的罪魁禍首。 如果我注釋掉行event.start = start; event.end = end
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()});
},
好的,找到了問題。
這行說
start = eend;
應該
start = eend.clone();
因為將其包裝在一個moment
對象中並沒有做,它只是保留了一個引用,並將新移動的事件的start
日期設置為與overlap.end
相同的Date
對象 overlap.end
您還有另一個錯誤,持續時間應為
var duration = end - start;
因為在您的方法中,它計算重疊事件的持續時間,而不是您剛剛移動的事件的持續時間
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.