2010-12-08 70 views
0

我正在开发一个应用程序来管理随叫随到的日历,使用FullCalendar来呈现它。大多数活动为期一周,从星期二上午8:00开始,到下周二上午8:00结束。另一个事件,大概是一个不同的人随时待命,将会跟随那个事件。FullCalendar显示本周内事件发生的最后几周事件

在走廊可用性测试中,有人评论说月历视图很难阅读,因为前几周的活动不在堆栈的顶部,而是在该周开始的事件之下呈现。当被观看时,眼睛感觉到它应该下行1行来查看剩余的时间线,因为上周发生的事件在那里,而不是下移到下一周。

我调查了我认为是这个问题:

function segCmp(a, b) { 
    return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start); 
}

排序的列的事件,但使用在计算事件的长度。由于本周的活动持续时间较长,因此总是排在最前面。为了测试,我将开始日期更改为星期三,以便持续时间更近。这导致事件呈现我期望的状态,最后几周的事件在顶部,本周在底部。

我认为如果比较中的其中一个事件没有开始那一周,那么它应该只根据开始时间进行比较。我修改功能是:

function segCmp(a, b) { 
    if (a.isStart == false || b.isStart == false) { 
     return (a.event.start - b.event.start); 
    } 
    return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start); 
}

这解决了我的问题,现在渲染看起来不错 - 并通过走廊测试。我不知道这是否会对其他领域产生影响。我看了其他的观点(月,周,日),他们似乎都在正确渲染。我对FullCalendar不够熟悉,无法就此提出错误或功能请求,或者甚至将其视为错误。

我在想,如果我修改的是正确的,或者如果它不是一个更好的修改将是解决这个问题。

谢谢!

下面我有什么要显示的JSON结果:


[{"title":"Person 1 - OnCall (OSS On Call)","id":12,"allDay":false,"start":"2010-11-30T15:00:00.0000000Z","end":"2010-12-07T15:00:00.0000000Z","editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/12"}, 
{"title":"Person 2 - OnCall (OSS On Call)","id":13,"allDay":false,"start":"2010-12-07T15:00:00.0000000Z","end":"2010-12-14T15:00:00.0000000Z","editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/13"}, 
{"title":"Person 3 - OnCall (OSS On Call)","id":14,"allDay":false,"start":"2010-12-14T15:00:00.0000000Z","end":"2010-12-21T15:00:00.0000000Z","editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/14"}, 
{"title":"Person 4 - OnCall (OSS On Call)","id":15,"allDay":false,"start":"2010-12-21T15:00:00.0000000Z","end":"2010-12-28T15:00:00.0000000Z","editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/15"}, 
{"title":"Person 5 - OnCall (OSS On Call)","id":16,"allDay":false,"start":"2010-12-28T15:00:00.0000000Z","end":"2011-01-04T15:00:00.0000000Z","editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/16"}, 
{"title":"Person 6 - OnCall (OSS On Call)","id":17,"allDay":false,"start":"2011-01-04T15:00:00.0000000Z","end":"2011-01-11T15:00:00.0000000Z","editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/17"}, 
{"title":"Christmas","id":2,"allDay":true,"start":"2010-12-25T07:00:00.0000000Z","end":null,"editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/2"}, 
{"title":"New Years Eve","id":3,"allDay":true,"start":"2010-12-31T07:00:00.0000000Z","end":null,"editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/3"}, 
{"title":"New Years Day","id":4,"allDay":true,"start":"2011-01-01T07:00:00.0000000Z","end":null,"editable":false,"className":"fc-event-title-calendar","url":"/TimeManagement/Edit/4"}]

回答

0

听起来像你试图解决这个问题: http://code.google.com/p/fullcalendar/issues/detail?id=510

我不认为你的MOD会造成任何不良行为,当你有两个包装到第二行的事件时,它会中断,保证它们保持相同的顺序。一个防弹解决方案需要一点点进一步的工作,希望在某个时候解决这个问题。