我正试图通过拖放成功收集所有事件数据。通过使用eventReceive
,我在一定程度上成功地做到了这一点。它设法获取了title
、start
和end
,但没有获取resourceID
。
显然,eventReceive
(以及随后的"事件对象"(只允许title
、start
和end
,而不允许导致问题的resourceID
。
然而,我注意到drop:
正上方的部分正在使用arg.resource.id
获取并控制台记录resourceId
。
所以我的问题是,我如何可能将两者结合起来,并输出所有的title
、start
、end
和resourceID
。如有任何帮助,我们将不胜感激。
drop: function(arg) {
console.log('drop date: ' + arg.dateStr)
if (arg.resource) {
console.log('drop resource: ' + arg.resource.id)
const resourceID = arg.resource.id;
console.log('TESTING: ' + resourceID);
}
if (document.getElementById('drop-remove').checked) {
arg.draggedEl.parentNode.removeChild(arg.draggedEl);
}
},
eventReceive: function(arg) { // called when a proper external event is dropped
console.log('eventReceive', arg.event);
const eventData = {
title: arg.event.title,
resourceId: arg.event.resourceId,
start: arg.event.start,
end: arg.event.end,
};
console.log(eventData);
在drop
回调中,资源ID是常规丢弃信息的一部分,因为此时还没有日历事件。因此,资源信息不会以类似的方式从事件对象中访问,这两件事是不相关的。
然而,令人沮丧的是,事件对象文档实际上并没有指定如何从事件中读取关联的资源数据。出于某种原因,相关资源似乎不打算成为活动的公共财产。
当arg.event
被记录到控制台时,通过检查其内部,我们可以看到,_def
属性中实际上有一个resourceIds
属性,而不是resourceId
属性,它是一个资源ID数组-一个事件可以与多个资源关联。
因此,可以访问该属性,但它实际上不应该是公共的,所以我们不应该依赖它。幸运的是,快速查看完整的Calendar文档可以发现,事件对象有一个方便的getResources方法可以调用。
因此,如果在eventReceive
回调中写下:
const eventData = {
title: arg.event.title,
resourceIds: arg.event.getResources().map(function(resource) { return resource.id }),
start: arg.event.start,
end: arg.event.end,
};
这将检索分配给事件的resourceId的数组。当然,在刚刚将事件放到特定位置的日历上的上下文中,在实践中,此数组将只包含一个条目。
演示:https://codepen.io/ADyson82/pen/bGYQXLJ