我们正在使用jquery插件fullCalendar来处理工作中的项目。但是,我们希望在每天的列中显示具有某些属性的特定事件。问题是我不想更改Fullcalendar.js的源代码,如果我不需要,甚至看起来它使用缩小的.js来渲染事件。
我知道它存在触发自定义事件eventRender: function (event, element)
的触发器,但我想要将事件呈现在最顶层。对于此示例,我们可能会说该事件具有important
属性。
所以我猜这个伪代码会让我的例子更清晰:
eventRender: function (event, element) {
if(event.important) {
//render at top
}
}
答案 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
}