FullCalendar - 默认事件持续时间

时间:2011-02-17 11:08:09

标签: javascript jquery fullcalendar

我希望能够更改任何新创建事件的默认持续时间。

我在dayView中,如果我只是点击(而不是拖放)日历,我会半小时的会话。

默认情况下,我想将其设置为一小时。

也许使用这种代码:

, select: function (startDate, endDate, allDay, jsEvent, view) {
    endDate = new Date(startDate);
    endDate.setHours(endDate.getHours() + 1);
}

这有效地设置了良好的endDate,但没有进行visualy更新

half hour selection screenshot


修改

我正在尝试使行为与Google日历类似:如果用户点击它会选择1h事件,但用户仍然可以选择半小时。

3 个答案:

答案 0 :(得分:2)

基于其中一个例子:

select: function(start, end, allDay) {
    var title = prompt('Event Title:');
    if (title) {
        end = new Date(start);
        end.setHours(end.getHours() + 1);

        calendar.fullCalendar('renderEvent',
        {
        title: title,
        start: start,
        end: end,
        allDay: allDay
        },
        true // make the event "stick"
        );
    }
    calendar.fullCalendar('unselect');
},

在问题更新之前:

这样的事情应该有效:

eventClick: function (calEvent, jsEvent, view) {
  calEvent.end = new Date(calEvent.start);
  calEvent.end.setHours(calEvent.start.getHours() + 1);
  $('#calendar').fullCalendar('updateEvent', calEvent);
},

答案 1 :(得分:0)

这是我找到的临时解决方案:

在fullcalendar.js文件中,找到名为slotSelectionMousedown的函数。将dates = ...行更改为:

    if (cell == origCell && (t.name == "agendaWeek" || t.name == "agendaDay"))
        dates = [
            d1,
            addMinutes(cloneDate(d1), snapMinutes), // calculate minutes depending on selection slot minutes 
            d2,
            addMinutes(cloneDate(d2), snapMinutes + 30)
        ].sort(cmp);
    else
        dates = [
            d1,
            addMinutes(cloneDate(d1), snapMinutes), // calculate minutes depending on selection slot minutes 
            d2,
            addMinutes(cloneDate(d2), snapMinutes)
        ].sort(cmp);

请注意,这只是临时解决方案/ hack,因为它将被新的Fullcalendar版本覆盖。您可能会尝试再次添加这些行,但它有可能无法正常工作。

答案 2 :(得分:0)

FullCalendar select callback可让您将end值重置为您想要的任何值。 start函数的endselect参数为moment.js个日期。您只需要通过选中hasTime()确保它不是全天活动,然后您可以使用片刻将end时间添加30分钟(以使其长达一小时):

select: function(start, end) {
    if (end.hasTime()) {
        end.add(30, 'minutes');
    }
}