当我在fullCalendar上单击一个空时间段时,它会在该空单元格上绘制一个矩形。因此,如果我的 slotDuration 是 30 分钟,则该块代表 30 分钟。我还可以将光标拖到多个单元格上并选择自定义范围。但我需要做的是,当用户单击(而不是拖动)单元格时,在 2 个单元格(代表 1 小时)上选择并绘制矩形。这可能吗?我无法更改插槽持续时间。如果我将 snapDuration 更改为 1 小时,它可以工作,但遗憾的是,我也无法更改它。我一直在寻找一种覆盖event.end
的方法,但这不起作用。
更新 1:
我能够这样做来公开cellDuration
属性:
在完整日历上.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.js 文件。是的,我知道你在这个问题上具体说明,但我认为别无选择。
正是 listenStop
函数,位于版本 2.3.3 的第 4527 行
侦停止检查数组调用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);
}
}
}