2017-08-14 84 views
0

我正在使用最新版本的FullCalendar(http://fullcalendar.io)。 FullCalendar會顯示繪製客戶訪問時間的日曆。它在內部存儲日曆事件,以便更快地倒退和前進到各個月份。它正在爲當月,比上月和上,直到我回到二月2017年,在此期間,我得到的JavaScript控制檯以下錯誤信息:FullCalendar無法讀取屬性'_id'null

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」,而不是未定義的屬性「_id」) - 當我切換出與真正的客戶端名稱所發生單詞「客戶名稱」和一個ID,但它仍然發生在你​​打2月份時。

有趣的是,當我使用代碼來處理這個測試用例時,即使在我通過二月份日曆顯示日期之後,也會在一月份觸發AJAX調用。

+0

沒有看到您的日曆設置和一些示例數據,真的不可能說出什麼問題。我不認爲完整的模型是必要的,但是查看導致錯誤的數據會很有用 - 如果在某個特定時間段內進行ajax調用時發生錯誤,我猜可能有一些東西缺少輸入數據 - 可能是一個空對象,它應該具有「_id」屬性。 – ADyson

+0

你究竟是什麼意思?「它在內部存儲日曆事件以使其更快地返回到前幾個月」。您是否正在使用fullCalendar將所有事件數據預先加載很長一段時間?錯誤是否發生在需要加載更多數據的地方?還是應該還有那個月份預先加載的數據? – ADyson

+0

FullCalendar存儲事件數據,當您查看數月的信息時 - 我還沒有深入瞭解源代碼,知道它是如何工作的,但我可能不得不最終去那裏。我不知道它是否使用全局JavaScript變量,數據屬性或什麼。您不會重新加載頁面以更改月份,因此無需另外進行AJAX往返 – TulsaMJ

回答

0

您的二月份數據中有一個對象沒有id。你可以在這裏看到: http://scripturemenu.com/test/calendar-events-json.html?TechID=all&show=customer&start=2017-01-29&end=2017-03-05&_=1502766053928

enter image description here

這可能是你的JS錯誤

+1

就是這樣!或者,至少它讓我走上了正軌。這個問題在我的後端腳本中被解決了 - 我通過串聯字符串和一些客戶名字創建了JSON對象,其中有一些撇號(「O'Rourke」等),這些撇號使得事情變得更糟。一旦我解決了這個問題,事情就開始奏效了! – TulsaMJ

+0

我不知道你使用的是什麼後端語言,但有可能是創建JSON的一種更好的方式,只是加入字符串,正如你發現的那樣,容易出現意想不到的錯誤。通常有一些存在於該語言中的serialiser工具,並且會爲你處理所有這些東西。例如對於PHP,有「json_encode()」方法。這是你解決它的方式嗎? – ADyson

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代碼格式。

+0

你的回答更詳細,但是由於@jperelli首先回答我檢查了他的答案。感謝你們兩位的幫助! – TulsaMJ