Fullcalendar 2.5 eventSource url 附加格式不正确的开始和结束日期
Fullcalendar 2.5 eventSource url appends start and end date incorrectly formatted
所以我正在 AngularJS 应用程序中将 fullcalendar 从 1x 升级到 2x,我 运行 遇到了一些事件源 url 需要收集的问题日历事件在需要以秒为单位时附加格式为 (YYYY-MM-DD) 的开始和结束参数日期——我认为——至少这是我们在版本 1x 中的工作方式。
当我的控制器被实例化时,我做的第一件事是建立传递到 fullcalendar 指令所需的 eventSources 变量(我正在使用 angular fullcalendar 包装器指令:http://angular-ui.github.io/ui-calendar/)。
HTML:
<div id="calendar" class="col-sm-9" ng-model="eventSources" calendar="myCalendar" config="uiConfig.calendar" ui-calendar="uiConfig.calendar"></div>
控制器:
$scope.eventSources = [];
for (var i = 0; i < calendars.length; i++) {
$scope.eventSources[i] = getEventSource(calendars[i]);
}
var getEventSource = function(calendar) {
return {
cid: calendar.cal_head_id,
url: "/api/classroom/student/calendar?ids=" + calendar.cal_head_id,
className: 'calendar-' + calendar.sort_order,
backgroundColor: calendar.color_code
};
};
但是我的字符串参数一直显示为:
ids=2525213&start=2015-11-30&end=2016-01-11&_=1449868998385
最后是我的服务器端代码来处理请求:
[ActionName("calendar")]
public JsonArray GetCalendarEvents(string ids, int start, int end)
{
var calendars = ids.Split(',');
var startDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(start);
var endDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(end);
var data = new CalendarService().GetEvents(calendars, 0, startDate, endDate);
var events = new JsonArray();
var results = (JsonArray) data["results"];
foreach (JsonObject obj in results)
{
var name = ((JsonString) obj["name"]).Value;
if (name == "<b>Homework</b>")
{
name = "<img src=/images/icons/house.png /> Homework";
}
var link = ((JsonString) obj["link"]).Value;
if (!string.IsNullOrEmpty(link) && link.Contains("doEditEvent"))
{
link = "";
}
var eventStart = Convert.ToDateTime(obj["start_time"].ToString());
var eventEnd = Convert.ToDateTime(obj["end_time"].ToString());
events.Add(new JsonObject
{
{"id", obj["event_id"]},
{"calId", obj["calendar_id"]},
// Note: Firefox requires the dates are in the below format - JD 6/12/2013
{"start", eventStart.ToString("o")},
{"end", eventEnd.ToString("o")},
{"allDay", eventStart == eventEnd.AddMinutes(1).AddDays(-1)},
{"title", name},
{"link", link},
{"description", obj["description"]}
});
}
return events;
}
手动添加开始和结束的问题是 fullcalendar 默认情况下会这样做,因此它会多次连接参数。根据关于从 1x 升级到 2x (http://fullcalendar.io/wiki/Upgrading-to-v2/) 的文档,该库已更新为使用 moment,这很棒,因为我认为这会解决任何格式问题,而且我肯定将其包含在我的项目中。
我正在寻找一种解决方案,希望不会让我篡改完整日历源代码,否则我需要回到 1x。
startParam 和endParam 从v1 更改为v2,从UNIX 时间戳更改为ISO8601 样式日期字符串。您将不得不添加包含时间戳的其他参数,修改 fullcalendar.js 以发送时间戳,修改您的服务器端代码,或者使用 v1.xx
对于您的服务器端代码,您似乎可以将其更改为
[ActionName("calendar")]
public JsonArray GetCalendarEvents(string ids, string start, string end)
{
var calendars = ids.Split(',');
var startDate = DateTime.parse(start);
var endDate = DateTime.parse(end);
如果您想将 'start' 和 'end' 覆盖为 UNIX 标记,这可能有效。
$('#calendar').fullCalendar({
/* You can rename the start and end params from 'start' and 'end' */
/* In this code, 'start', 'end' and 'startDate' and 'endDate' will be on URL */
startParam: 'startDate',
endParam: 'endDate',
eventSources: [{
url: '/test', /* Set this to whatever is appropriate */
data: function() {
var view = $('#calendar').fullCalendar('getView');
return {
/* Then you can change 'start' and 'end' in the URL to be UNIX stamps */
'start': view.start.unix(),
'end': view.end.unix(),
};
},
/* This is just to demo the URL being queried, not required */
beforeSend: function () {
alert(this.url);
}
}]
});
所以我正在 AngularJS 应用程序中将 fullcalendar 从 1x 升级到 2x,我 运行 遇到了一些事件源 url 需要收集的问题日历事件在需要以秒为单位时附加格式为 (YYYY-MM-DD) 的开始和结束参数日期——我认为——至少这是我们在版本 1x 中的工作方式。
当我的控制器被实例化时,我做的第一件事是建立传递到 fullcalendar 指令所需的 eventSources 变量(我正在使用 angular fullcalendar 包装器指令:http://angular-ui.github.io/ui-calendar/)。
HTML:
<div id="calendar" class="col-sm-9" ng-model="eventSources" calendar="myCalendar" config="uiConfig.calendar" ui-calendar="uiConfig.calendar"></div>
控制器:
$scope.eventSources = [];
for (var i = 0; i < calendars.length; i++) {
$scope.eventSources[i] = getEventSource(calendars[i]);
}
var getEventSource = function(calendar) {
return {
cid: calendar.cal_head_id,
url: "/api/classroom/student/calendar?ids=" + calendar.cal_head_id,
className: 'calendar-' + calendar.sort_order,
backgroundColor: calendar.color_code
};
};
但是我的字符串参数一直显示为:
ids=2525213&start=2015-11-30&end=2016-01-11&_=1449868998385
最后是我的服务器端代码来处理请求:
[ActionName("calendar")]
public JsonArray GetCalendarEvents(string ids, int start, int end)
{
var calendars = ids.Split(',');
var startDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(start);
var endDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(end);
var data = new CalendarService().GetEvents(calendars, 0, startDate, endDate);
var events = new JsonArray();
var results = (JsonArray) data["results"];
foreach (JsonObject obj in results)
{
var name = ((JsonString) obj["name"]).Value;
if (name == "<b>Homework</b>")
{
name = "<img src=/images/icons/house.png /> Homework";
}
var link = ((JsonString) obj["link"]).Value;
if (!string.IsNullOrEmpty(link) && link.Contains("doEditEvent"))
{
link = "";
}
var eventStart = Convert.ToDateTime(obj["start_time"].ToString());
var eventEnd = Convert.ToDateTime(obj["end_time"].ToString());
events.Add(new JsonObject
{
{"id", obj["event_id"]},
{"calId", obj["calendar_id"]},
// Note: Firefox requires the dates are in the below format - JD 6/12/2013
{"start", eventStart.ToString("o")},
{"end", eventEnd.ToString("o")},
{"allDay", eventStart == eventEnd.AddMinutes(1).AddDays(-1)},
{"title", name},
{"link", link},
{"description", obj["description"]}
});
}
return events;
}
手动添加开始和结束的问题是 fullcalendar 默认情况下会这样做,因此它会多次连接参数。根据关于从 1x 升级到 2x (http://fullcalendar.io/wiki/Upgrading-to-v2/) 的文档,该库已更新为使用 moment,这很棒,因为我认为这会解决任何格式问题,而且我肯定将其包含在我的项目中。
我正在寻找一种解决方案,希望不会让我篡改完整日历源代码,否则我需要回到 1x。
startParam 和endParam 从v1 更改为v2,从UNIX 时间戳更改为ISO8601 样式日期字符串。您将不得不添加包含时间戳的其他参数,修改 fullcalendar.js 以发送时间戳,修改您的服务器端代码,或者使用 v1.xx
对于您的服务器端代码,您似乎可以将其更改为
[ActionName("calendar")]
public JsonArray GetCalendarEvents(string ids, string start, string end)
{
var calendars = ids.Split(',');
var startDate = DateTime.parse(start);
var endDate = DateTime.parse(end);
如果您想将 'start' 和 'end' 覆盖为 UNIX 标记,这可能有效。
$('#calendar').fullCalendar({
/* You can rename the start and end params from 'start' and 'end' */
/* In this code, 'start', 'end' and 'startDate' and 'endDate' will be on URL */
startParam: 'startDate',
endParam: 'endDate',
eventSources: [{
url: '/test', /* Set this to whatever is appropriate */
data: function() {
var view = $('#calendar').fullCalendar('getView');
return {
/* Then you can change 'start' and 'end' in the URL to be UNIX stamps */
'start': view.start.unix(),
'end': view.end.unix(),
};
},
/* This is just to demo the URL being queried, not required */
beforeSend: function () {
alert(this.url);
}
}]
});