2012-04-24 80 views
2

我在我的項目中使用Fullcalendar(http://arshaw.com/fullcalendar)。它通過json源獲取事件。Javascript Fullcalendar - 複製事件

我想給用戶選擇複製日曆上的一個事件到另一天 - 我想用拖動(嗯,這是客戶的要求)。

但拖動似乎是移動一個事件,而不是複製 - 有沒有辦法讓被拖動的事件的「副本」(或複製停留在原始位置),所以它看起來像複製操作?

我試圖在eventDragStart回調中複製事件對象,但它不起作用。

+1

IMO在此線程最後一個註釋可以給你一個起點http://code.google.com/p/fullcalendar/issues/detail ?id = 105 – 2012-04-24 21:11:42

+0

如果你以某種方式實現這一點。您將失去拖動功能。你能接受嗎? – 2012-04-25 21:50:37

+0

是的,我只需要複製,而不是移動事件... – kender 2012-04-26 07:47:58

回答

1

試試這個:

eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view) { 
    // Create an event object and copy at least the start date and the title from event 
    var eventClone = { 
     title:event.title, 
     start: event.start, 
     end: event.end 
    }; 

    // Render new event with new event object 
    $('#calendar').fullCalendar('renderEvent', eventClone); 

    // Revert the changes in parent event. To move it back to original position 
    revertFunc(); 
} 

這只是想法。我沒有測試過這個代碼。請讓我知道它是如何工作的。 謝謝

+0

您可能必須使用[clone方法](http://stackoverflow.com/questions/122102/what-is-the-most-efficient克隆一個JavaScript對象)來創建開始和結束日期的深層副本。但不要克隆整個事件對象。因爲它包含可能導致問題的_id(由fullCalendar分配給每個事件的ID)。 – 2012-04-26 13:51:39

5

下面是我的解決方案,允許用戶按住shift鍵複製事件。 請注意,這實際上是在移動原始事件並將副本留在原始位置。

我開始與this reference,並創建了以下內容:

//Before the fullCalendar object 

    var copyKey = false; 
    $(document).keydown(function (e) { 
     copyKey = e.shiftKey; 
    }).keyup(function() { 
     copyKey = false; 
    }); 

//then inside the fullCalendar object 

    eventDragStart: function (event, jsEvent, ui, view) { 
     if (!copyKey) return; 
     var eClone = { 
      title: event.title, 
      start: event.start, 
      end: event.end 
     }; 
     $('#calendar').fullCalendar('renderEvent', eClone); 
    }, 
+0

會很高興看到這一小提琴 – HPWD 2018-01-30 02:13:07