单击时选择多个时间段

时间:2014-12-03 20:52:31

标签: fullcalendar

当我点击fullCalendar上的空时隙时,它会在该空单元格上绘制一个矩形。因此,如果我的slotDuration为30分钟,则该块代表30分钟。我也可以将光标拖到多个单元格上并选择自定义范围。但我需要做的是,当用户在单元格上单击(而不是拖动)时,选择并在2个单元格上绘制矩形(表示1小时)。这可能吗?我无法更改slotDuration。 如果我将snapDuration更改为1小时,它可以正常工作,但遗憾的是,我也无法更改它。 我正在寻找的是一种覆盖event.end的方法,但这种方法不起作用。

更新1:
我能够做到这一点暴露cellDuration属性:

on fullCalendar.js:

t.setCellDuration = function (minutes) {        
    var duration = moment.duration(minutes, 'minutes');
    var view = t.getView();     
    view.timeGrid.cellDuration = duration;
}

现在在renderEvent处理程序上,我可以调用

element.fullCalendar("setCellDuration", 60);

它有效,但是如果有一个替代方案不涉及更改fullCalendar代码,那就太好了。

1 个答案:

答案 0 :(得分:0)

我认为你不能只修改日历的属性,但你可以修改fullCalendar.js文件。是的,我知道你在问题上指明了它,但我认为没有替代方案。

正好是listenStop函数,它位于第4527 at version 2.3.3

listenStop检查数组调用dates

dates[
   {FCMoment}, //start
   {FCMoment}  //end
]

因此,在检查之前,您可以根据需要修改结束时间。另外,你必须渲染它。 在你的代码中,现在listenStop()函数应该是这样的:

 listenStop: function(ev) {
            if (dates) { // started and ended on a cell?
                if (dates[0].isSame(dates[1])) {
                    dates[1] = dates[0].clone().add(1, 'hours');    //Now we modify the end
                    _this.renderSelection(dates[0], dates[1]);      //And render the modified selection
                    view.trigger('dayClick', dayEl[0], start, ev);
                }
                if (isSelectable) {
                    // the selection will already have been rendered. just report it
                    view.reportSelection(start, end, ev);
                }
            }
        }