Javascript FullCalendar事件对象:非标准字段(GCal)

Javascript FullCalendar事件对象:非标准字段(GCal),javascript,fullcalendar,google-calendar-api,fullcalendar-3,Javascript,Fullcalendar,Google Calendar Api,Fullcalendar 3,完整日历(FC)文档状态 非标准字段除上述字段外,您还可以 在每个事件对象中包括您自己的非标准字段。 FullCalendar不会修改或删除这些字段。例如 开发人员通常包括一个描述字段,用于回调,例如 作为事件呈现。[来源: 和谷歌日历事件源 高级:扩展属性谷歌日历的API允许您为事件指定扩展属性。扩展属性 将作为附加到的extendedProperties散列提供 每个事件对象。[源: 然而,不太清楚的是哪些GCal eventSource属性被划分为标准属性,哪些是非标准属性 ‍‍‍‍‍‍

完整日历(FC)文档状态

非标准字段除上述字段外,您还可以 在每个事件对象中包括您自己的非标准字段。 FullCalendar不会修改或删除这些字段。例如 开发人员通常包括一个描述字段,用于回调,例如 作为事件呈现。[来源:

和谷歌日历事件源

高级:扩展属性谷歌日历的API允许您为事件指定扩展属性。扩展属性 将作为附加到的extendedProperties散列提供 每个事件对象。[源:

然而,不太清楚的是哪些GCal eventSource属性被划分为标准属性,哪些是非标准属性

‍‍‍‍‍‍ ‍‍

假设第一个事件对象文档上列出的属性也适用于GCal eventSources的标准属性,则意味着其他任何内容都可能是非标准字段,对吗

如果我想查询给定FC事件的创建者字段,例如creator.displayNamecreator.email,请按照出现在事件弹出窗口底部的Google API ref doc进行查询,即“Created by:…”(在Google日历中,不是FC),但我不确定如何完成此操作。 ‍‍‍‍‍‍ ‍‍

我在任何地方都找不到FullCalendar(v3)GCal eventSources的标准和非标准字段的完整列表,更不用说如何访问这些属性的文档/示例了

‍‍‍‍‍‍ ‍‍

无论如何,我尝试了以下几点:

console.log(event.extendedProperties.creator.displayName);
console.log(event.extendedProperties.creator.email);
刚生产

jquery-3.3.1.min.js:2 jquery.延迟异常:无法读取未定义类型的属性“displayName”错误:无法读取未定义类型的属性“displayName”

‍‍‍‍‍‍ ‍‍

果然event.extendedProperties.creator确实生成了未定义的。但接下来我尝试了:

console.log(event.extendedProperties);
console.dir(event.extendedProperties);
这并没有产生错误,而是一个看似空的对象

因此,如果它返回时没有任何内容(即空对象)可以公平地假设我正在查询的给定事件没有扩展属性,也可以合理地假设创建者字段:creator.displayNamecreator.email毕竟不是非标准字段,或者至少不是扩展属性类型


等一下,这是否意味着我们正在处理的非标准字段列表中可能有两种类型,或者我盯着这个屏幕太久了?当fullCalendar文档说

GoogleCalendar的API允许您为其指定扩展属性 您的事件。扩展属性将作为 附加到每个事件对象的extendedProperties哈希

它们指的是您在Google Calendar events中定义的额外自定义字段-日历API不支持或不作为标准提供的字段。fullCalendar将这些字段复制为“额外”。它不是指“fullCalendar通常不视为标准的任何字段”

现在,因为日历API返回的事件数据结构几乎没有一个会直接映射到fullCalendar要求您提供的数据结构上,以便构造有效的事件对象(请参阅中的fullCalendar的“标准”字段列表),我们不能简单地将Calendar API的JSON输出直接提供给fullCalendar,并期望它工作并自动映射字段

这就是为什么fullCalendar提供了
gcal.js
文件作为一个方便的实用程序来连接API,检索事件数据,并将其转换为fullCalendar期望并理解的格式。显然,开发人员选择了要从一个字段转到另一个字段的字段。因为有一个新对象被构造为传递到fullCalendar,没有任何类型的自动映射-这一切都依赖于代码中所写的内容。通常,如果您向fullCalendar direct提供JSON,它还会复制在对象中找到的任何其他字段,以及它实际识别为“标准”的字段(也就是说,标准对象是它在文档中解释的用于特定目的的对象)。但同样,由于代码为fullCalendar创建了新对象,因此也不会发生这种情况

除了关于“extendedProperties”的注释外,没有明确的文档说明代码将哪些字段从API输出复制到与fullCalendar兼容的事件对象中。使用
console.log($(“#calendar”).fullCalendar(“clientEvents”)的快速体验;
在您的页面中,将显示最终事件的属性,但您也可以查看源代码。在撰写本文时,最新版本的fullCalendar v3为3.10,该版本的gcal.js源代码(可查看)

代码包含以下代码段,用于将API数据转换为fullCalendar对象:

    return {
        id: item.id,
        title: item.summary,
        start: item.start.dateTime || item.start.date,
        end: item.end.dateTime || item.end.date,
        url: url,
        location: item.location,
        description: item.description,
        extendedProperties: extendedProperties
    };
在您的问题和评论中,您提到您对日历API提供的
creator
description
字段感兴趣。这些是GCal中的标准字段(根据),因此不在“extendedProperties”中“集合。您还可以看到,
description
已被gcal.js复制,尽管它不是fullCalendar通常使用的字段,但如果您想在日历中使用它,它仍然存在

因此,要使
creator
字段(或GCal属性中的任何其他字段)在fullCalendar事件中可用,只需将其包含在GCal.js复制的数据中即可。e
    return {
        id: item.id,
        title: item.summary,
        start: item.start.dateTime || item.start.date,
        end: item.end.dateTime || item.end.date,
        url: url,
        location: item.location,
        description: item.description,
        extendedProperties: extendedProperties,
        creator: item.creator
    };