真不敢相信居然没人问这个问题。这快把我逼疯了。我使用FullCalendar让用户将外部事件放到日历中。我遵循众所周知的方法:
$('#external-events div.external-event').each(function () {
var eventObject = {
type: 2,
id: $(this).attr("data-id"),
title: $(this).attr("data-name"),
duration: $(this).attr("data-duration"),
guid: $(this).attr("data-guid"),
color: $(this).attr("data-color")
};
// store the Event Object in the DOM element so we can get to it later
$(this).data('eventObject', eventObject);
// make the event draggable using jQuery UI
$(this).draggable({ zIndex: 999, revert: true, revertDuration: 0 });
});
我的日历是这样配置的(drop event):
drop: function(date) {
// retrieve the dropped element's stored Event Object
var originalEventObject = $(this).data('eventObject');
// we need to copy it, so that multiple events don't have a reference to the same object
var copiedEventObject = $.extend({}, originalEventObject);
// assign it the date that was reported
copiedEventObject.start = date.format();
// render the event on the calendar
//$('#calendar').fullCalendar('renderEvent', copiedEventObject, true);
$.ajax({
async: false,
url: '@Url.Action("AddWorkoutToPlan", "Planning")',
data: { 'planId': planId, 'workoutId': copiedEventObject.id, 'date': date.format() },
success: function(data) {
$('#calendar').fullCalendar('refetchEvents');
}
});
},
正如你所看到的,我不渲染事件,我只是做一个ajax调用和成功,我重新获取事件,所以我可以得到DB id,以防用户想要删除它。
我是这样得到我的事件的:
events: {
url: '@Url.Action("GetPlannedActivities", "Planning")',
data: function() { return { planId: '@Model.Id' } },
beforeSend: function(xhr, opts) {
if (!$("#selectedPlan").val()) {
xhr.abort();
unblockContainer($("#calendar"));
}
},
success: function(data) {}
},
这工作得很好,但如果用户从当前月份移动,那么外部事件不会拖动也不会触发拖放回调…我不知道哪里出错了…
任何想法?
最后我将FullCalendar版本从2.1.0_BETA1/BETA2回滚到v2.0.2,现在可以正常工作了。
所以我猜这是新版本中使用DIVS而不是TABLES的错误。