FullCalendar jQuery库(http://arshaw.com/fullcalendar/)满足了我的需求。它似乎正好有我需要的东西。但是,我不知道如何配置它以使用此现有的 JSON 服务返回:
{
"SystemResponse": null,
"Events":
{
"systemMessageField": "",
"otherMessageField": "",
"eventsField":
[
{
"additionalTextField": "",
"eventTitle": "eventTitle1",
"eventCommentsField": "",
"eventDateTimeField": "/Date(1379953200000-0500)/",
"eventDateTimeFieldSpecified": true,
"eventEndDateTimeField": "/Date(1379954400000-0500)/",
"eventSourceIDField": "2",
"eventSourceNumberField": "",
"eventTimeZoneField": "CDT",
"eventTypeField": "9109"
},
{
"additionalTextField": "Add Text",
"eventTitle": "eventTitle1",
"eventCommentsField": "",
"eventDateTimeField": "/Date(1379975400000-0500)/",
"eventDateTimeFieldSpecified": true,
"eventEndDateTimeField": "/Date(1379979000000-0500)/",
"eventSourceIDField": "3",
"eventSourceNumberField": "",
"eventTimeZoneField": "CDT",
"eventTypeField": "U123"
}
]
}
}
我相信该服务应该返回类似于"理想"的完整日历返回:
[
"0",
{
"allDay": "",
"title": "Test event",
"id": "821",
"end": "2011-06-06 14:00:00",
"start": "2011-06-06 06:00:00"
},
"1",
{
"allDay": "",
"title": "Test event 2",
"id": "822",
"end": "2011-06-10 21:00:00",
"start": "2011-06-10 16:00:00"
}
]
有没有办法利用FullCalendar功能来获取我的原始源json并像这样映射:
事件日期时间字段>开始
eventEndDateTimeField->end
事件标题->标题
然后 FullCalendar 控件应该能够使用我的原始事件服务来创建事件(哦,并解析那些讨厌的 json 日期......
您的想法是正确的,将 JSON 源中的结果映射到 FullCalendar 的事件对象属性。
您必须确保 allDay 是一个布尔值,这意味着您返回的 true 或 false 不带引号(使用浏览器确保它显示 "allDay":true 或 "allDay":false,真或假之间没有任何引号!)。 要么这样做,要么根本不返回它,只是让你的默认值应用于所有事件(不是很实用)。
标准化一种日期格式也很有用,我发现 UNIX 日期/时间格式是 FullCalendar 和数据库后端之间最可靠的通信方式。 但是,请注意,您希望在几秒钟内完成此操作(现在为 10 位数字)。 从您的示例中,我可以看到它以毫秒为单位。 您需要除以 1,000 或将其视为字符串并取最左边的 10 个字符。 我建议您以 UTC 格式存储数据,并在数据库外部执行任何时区操作。 此操作将应用于检索和存储日期。
如果您无法更改现有 JSON 源中的编码,则可以创建一个中间"侦听器"来从当前源中检索数据,对其进行操作(确保 allDay 实际上是一个布尔值并反映事件的状态,重新格式化日期/时间数据并翻译元素的名称)。 然后,您的 FullCalendar 事件将显示为来自中介通过查询现有 JSON 源创建的 JSON 源。
FullCalendar存储所有属性,无论它是否使用它们,以便您仍然可以根据源中提供的增强数据操作事件对象,尽管只需要少数属性即可使 FullCalendar 正常运行。