【发布时间】:2017-09-28 15:24:46
【问题描述】:
我一直在努力做到这一点,以便我可以将事件从 fullcalendar 拖到垃圾箱中,并且我拥有的代码非常适用于在日历初始化时呈现的事件,但它似乎不适用于以下事件已从外部事件中删除到日历中。
当我将外部事件拖到日历上,然后尝试将它们拖到回收站时,它会删除所有事件。
我看过一些帖子,比如this,说要使用 _id 属性,但是当我这样做时,什么都没有被删除。
这是我正在使用的代码:
eventDragStop: function (event, jsEvent) {
var trashEl = jQuery('#trashCan');
var ofs = trashEl.offset();
var x1 = ofs.left;
var x2 = ofs.left + trashEl.outerWidth(true);
var y1 = ofs.top;
var y2 = ofs.top + trashEl.outerHeight(true);
if (jsEvent.pageX >= x1 && jsEvent.pageX <= x2 &&
jsEvent.pageY >= y1 && jsEvent.pageY <= y2) {
console.log(event);
$('#calendar').fullCalendar('removeEvents', event._id);
}
},
传递 event.id 有效,但 event._id,正如我在这里所拥有的,什么都不做。
编辑: 为了澄清一点,我决定我应该留下所有相关的代码。
这就是我处理外部事件的方式。第一个是直接从我工作了大约一年的完整日历实例中复制而来的。:
<div id="external-events" class="dropdown col-lg-3">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Unscheduled Events
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li class="dropdown-header">Drag events to calendar</li>
<li class="divider"></li>
<li><a href="#" data-duration="01:00" data-event='{"id": "803", "title": "Jennifer Ramundo"}' class='menu-event'>My Event 1</a></li>
<li class="divider"></li>
<li><a href="#" data-event="{'id': '2'}" class='menu-event'>My Event 2</a></li>
<li class="divider"></li>
<li><a href="#" data-event="{'id': '3'}" class='menu-event'>My Event 3</a></li>
</ul>
</div>
这是我初始化外部事件的方式:
$('#external-events .menu-event').each(function () {
// store data so the calendar knows to render an event upon drop
$(this).data('event', {
title: $.trim($(this).text()), // use the element's text as the event title
stick: true // maintain when user navigates (see docs on the renderEvent method)
});
// make the event draggable using jQuery UI
$(this).draggable({
zIndex: 999,
revert: true, // will cause the event to go back to its
revertDuration: 0 // original position after the drag
});
});
这是我的 drop 函数:
drop: function (date, jsEvent, ui, resourceId) {
console.log('drop', date.format(), resourceId);
$(this).parent().next().remove();
$(this).remove();
if ($('#external-events').find('.menu-event').length === 0) {
$('#external-events').hide();
}
},
【问题讨论】:
-
很明显的问题,但是您拖入的外部事件实际上有 ID 吗?
-
是的。我为每个事件添加了一个类似
data-event="{'id': '2'}"的属性,只是为了给它们一个ID(都是唯一的)。当它在日历上时,id 似乎也没有显示在事件对象中。如果你不做某事,它就像它消失在日历上一样。我试过其他属性,似乎唯一保留的就是标题。
标签: javascript jquery fullcalendar fullcalendar-scheduler