我正在使用最新版本的FullCalendar(http://fullcalendar.io)。 FullCalendar显示绘制客户访问时间的日历。它在内部存储日历事件,以便更快地前进到各个月。它适用于当月,上个月,以及直到2017年2月为止,此时我在JavaScript控制台中收到以下错误消息:
Uncaught TypeError: Cannot read property '_id' of null
at buildEventFromInput (fullcalendar.js:13527)
at fullcalendar.js:12980
at Object.success (fullcalendar.js:13110)
at i (jquery-3.2.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2)
at A (jquery-3.2.1.min.js:4)
at XMLHttpRequest.<anonymous> (jquery-3.2.1.min.js:4)
错误似乎在获取日期信息的AJAX函数之前触发,但为了确保我运行该月的查询,数据看起来很好。一旦错误触发,如果我回到我已经查看的其中一个月,我就不会再看到这些事件了。错误消息显然是以某种方式弄脏了内部数据存储,虽然JavaScript仍在运行,否则我将无法再切换几个月。
我希望熟悉FullCalendar的人在看到这个错误之前能指出正确的方向。该应用程序受登录保护并包含真实的客户端信息,因此构建一个用于测试目的的模型将非常复杂,所以我不必刻意这样做一两个小时 - 但是如果没有明显的答案我自己会咬紧牙关去做。
感谢任何帮助!
编辑:这是一个测试用例。http://scripturemenu.com/test/index.html
错误消息与我上面报告的内容略有不同(它试图读取属性“hasTime”而不是undefined的属性“_id”) - 当我用真实客户端名称改为“CLIENT NAME”时发生这种情况和一个ID,但是当你遇到二月时它仍然会发生。
有趣的是,当我使用代码来使这个测试用例工作时,AJAX调用也在1月触发,即使在我通过2月之后,日历上也没有日期显示。
答案 0 :(得分:1)
你的二月数据中有一个没有id
的对象。你可以在这里看到它:
http://scripturemenu.com/test/calendar-events-json.html?TechID=all&show=customer&start=2017-01-29&end=2017-03-05&_=1502766053928
这可能是你的js错误的原因
答案 1 :(得分:0)
存在一条无效事件数据。大多数事件看起来都是正确的,有ID,开始和结束时间,例如:
{"id":43969,"start":"2017-02-07","title":"CLIENT NAME 43969"}
但是有一个没有任何这些属性:
{"title":"CLIENT NAME "}
因此,fullCalendar不知道如何将其添加到日历中,因此崩溃。
将月视图更改为2月时检索到此数据,这触发了对
的AJAX请求http://scripturemenu.com/test/calendar-events-json.html?TechID=all&show=customer&start=2017-01-29&end=2017-03-05&_=1502777909174
您需要更正源数据和/或将源数据转换为fullCalendar的JSON格式的代码。