在顶部fullcalendar上呈现事件

时间:2013-03-05 14:56:16

标签: jquery fullcalendar

我们正在使用jquery插件fullCalendar来处理工作中的项目。但是,我们希望在每天的列中显示具有某些属性的特定事件。问题是我不想更改Fullcalendar.js的源代码,如果我不需要,甚至看起来它使用缩小的.js来渲染事件。

我知道它存在触发自定义事件eventRender: function (event, element)的触发器,但我想要将事件呈现在最顶层。对于此示例,我们可能会说该事件具有important属性。

所以我猜这个伪代码会让我的例子更清晰:

eventRender: function (event, element) {
    if(event.important) {
        //render at top
    }
}

2 个答案:

答案 0 :(得分:1)

我的任务要求发生了变化,现在每个事件都有一个特殊的优先级,即整数。数字越高,它就越重要。

旧:

// Old function, this won't sort based on importance first!
function segCmp(a, b) {
    return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start);
}

新:

function segCmp(a, b) {
    var priorityDiff = ((a.event.priority || 0) < (b.event.priority || 0)) ? 1 : ((b.event.priority || 0) < (a.event.priority || 0)) ? -1 : 0;
    if(priorityDiff != 0) return priorityDiff;
    return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start);
}

对于想要使用它的人,你的事件JSON看起来像这样:

{
allDay: false,
color: "#7BD148",
id: "1",
key: "1",
start: "2013-01-28 13:07:00",
title: "test event",
url: "http://google.se",
priority: 10
},
{
allDay: false,
color: "#7BD148",
id: "2",
key: "2",
start: "2013-01-28 12:07:00",
title: "test event 2",
url: "http://google.se",
priority: 5
},

正如您可能会看到第二个事件已提前安排但添加了代码,它将按优先级排序。所以第一个事件将首先发生,第二个事件发生在它之后。

这就是我解决它的方式,优先级是一个整数,我试图按顺序排序,除非它们相同或者它们不存在(null / undefined)。它按最高整数排序。

该功能在fullCalendar.js中。

答案 1 :(得分:1)

FullCalendar已从v.2.4.0开始添加此功能。它被称为&#34; eventOrder&#34;,并且是日历选项的设置。您可以将事件属性的名称作为参数传递,并根据该属性按字母顺序对事件进行排序。

Aggregation aggregation = newAggregation(
     match(Criteria.where("user_id").is(id)),
     group("meta_data.user_data.timezone").count().as("total"));

例如,数据是:

// start calendar
var $calendar = $("#calendar").fullCalendar({
    // Start of calendar settings
    header: {
        left: 'title',
        right: 'today,month,agendaDay,agendaWeek prev,next'
    },

    // setting to display sorted based on this property
    eventOrder: "priority",

    events: data
}