FullCalendar(FC)文档状态
非标准字段,除了上面的字段外,您还可以 在每个事件对象中包括您自己的非标准字段。 FullCalendar不会修改或删除这些字段。例如, 开发人员通常会在回调等中包含描述字段 作为eventRender。 [来源:Event Object]
以及Google日历事件源
高级:扩展属性,您可以使用Google Calendar API为事件指定扩展属性。扩展属性 将作为附加到的ExtendedProperties哈希值提供 每个事件对象。 [来源:events from Google Calendar]
但是还不清楚的是,哪些GCal eventSource属性被分类为标准属性,哪些是非标准的。
假设第一个“事件对象”文档中列出的属性也可用作GCal eventSources的标准属性,这意味着其他任何事情都可能是非标准字段,对吧?
如果我想查询给定FC事件的创建者字段,例如根据{{3}}的Google API参考文档, creator.displayName 或 creator.email 出现在事件弹出窗口的底部,即“创建者:... ”(在Google日历中,不是FC),但我不确定如何完成此操作。
我在任何地方都找不到FullCalendar(v3)GCal eventSource的标准和非标准字段的完整列表,没关系如何访问这些属性的文档/示例。
任何人尝试以下操作:
console.log(event.extendedProperties.creator.displayName);
console.log(event.extendedProperties.creator.email);
刚刚生产
jquery-3.3.1.min.js:2 jQuery.Deferred异常:无法读取未定义类型的属性'displayName'错误:无法读取未定义属性'displayName'
并确保足够的event.extendedProperties.creator确实产生了未定义。但是接下来我尝试了:
console.log(event.extendedProperties);
console.dir(event.extendedProperties);
没有产生错误,而是出现了空对象
因此,如果返回时没有任何结果(即空对象),则可以合理地假设我要查询的给定事件不具有extendedProperties,并且可以合理地假设创建者字段为: creator.displayName 和 creator.email 并不是全部或至少不是扩展属性类型的非标准字段。
请稍等,这是否意味着我们正在处理的“非标准字段”列表中可能有两种类型,或者我盯着这个屏幕停留了太长时间?
最后,我尝试仔细检查以确保它们已不属于事件对象。
console.log(event.creator.displayName);
console.log(event.creator.email);
但这又导致了
未捕获的TypeError :无法读取未定义的属性“ displayName”
我是否忽略了任何内容,或者是否存在我设法以某种方式错过的标准/非标准字段清单?
关于如何获取这些 creator 字段的任何想法都会很多 感谢。
我看不到任何形式的代码示例在这里都会有什么帮助,但是正如我最近被告知:“ 在堆栈溢出中几乎总是需要代码”,因此为了合规起见,这里是我的代码样本...
<div id='calendar'></div>
<script>
$(function() {
$('#calendar').fullCalendar({
googleCalendarApiKey: '%googleCalendarApiKey%',
events: {
googleCalendarId: 'lph029pf163sce67stdgfcdpfg@group.calendar.google.com' //imdb UK
},
defaultView: 'month',
eventRender: function(event, element) {
element.popover({
animation:true,
delay: 300,
title: event.title,
content: event.description, // + req << creator.displayName/email >> e.g."Created by: imdbreleases@gmail.com"
placement: 'auto',
trigger: 'hover'
});
}
});
});
</script>
PS未创建CodePen,建议不要共享GoogleAPIKey
答案 0 :(得分:1)
当完整的日历文档说出
通过Google Calendar的API,您可以为 您的活动。扩展属性将作为 附加到每个事件对象的extendedProperties哈希。
它们是指您可能已在Google Calendar事件中定义的其他自定义字段-Calendar API作为标准不支持或未提供的字段。这些是fullCalendar将复制为“额外”的字段。 不是指“ fullCalendar 通常不视为标准的任何字段”。
现在,因为Calendar API返回的事件数据结构几乎都不会直接映射到fullCalendar要求您提供的数据结构,以构造有效的事件对象(请参见参考资料中fullCalendar的“标准”字段列表) Event Object docs),我们不能简单地将Calendar API的JSON输出直接提供给fullCalendar并期望它能够正常工作并自动映射字段。
这就是为什么fullCalendar提供了gcal.js
文件作为便利实用程序来连接到API,检索事件数据并将其转换为fullCalendar期望并理解的格式的原因。显然,开发人员可以选择要从哪个领域转移到另一个领域。由于正在构造一个新对象以传递给fullCalendar,因此没有任何类型的自动映射-所有这些都依赖于代码中编写的内容。通常,如果将JSON提供给fullCalendar Direct,则它还会在对象中找到的所有其他字段之间进行复制,除了它实际识别为“标准”的字段外(即标准字段是用于特定目的的字段,如文档)。但是,由于代码再次为fullCalendar创建了新对象,因此也不会发生这种情况。
除了有关“ extendedProperties”的注释外,没有任何明确的文档来说明代码从API输出复制到完全兼容日历的事件对象的哪些字段。在页面中使用console.log($("#calendar").fullCalendar("clientEvents"));
进行快速实验将显示最终事件具有的属性,但是您也可以在源代码中查找。在撰写本文时,fullCalendar v3的最新版本为3.10,并且该版本的gcal.js源代码(可见here)。
代码包含以下代码段,可将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
};
在您的问题和评论中,您提到您会对Calendar API提供的creator
和description
字段感兴趣。这些是GCal中的标准字段(按照resource representation docs),因此不在“ extendedProperties”集合中。您还可以看到description
已经被gcal.js复制了,即使它不是fullCalendar通常使用的字段-但是,如果您想在日历中使用它,也可以使用它。>
因此,要使fullCalendar事件中的creator
字段(或GCal属性中的任何其他字段)可用,只需将其包含在gcal.js复制的数据中即可。例如:
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
};
当然,如果要通过CDN包含gcal.js / gcal.min.js,则需要更改代码以托管自己的修改版本。
顺便说一句,如果您认为默认情况下包含更多来自GCal的字段,那么fullCalendar项目将整体上受益,那么由于fullCalendar是开源社区项目,您可以自由使用{{3} }进行gcal实用程序的更改(这实际上是在fullCalendar的标准功能和Google Calendar API之间的一个方便的附加组件),或者甚至是make a feature request包含建议的更改,供维护者考虑包含在主版本中。如果失败,则可以继续维护修改后的gcal.js版本,甚至可以将其完全替换为您自己的实用程序,以便与Calendar API进行交互。