2014-12-03 126 views
0

当我点击fullCalendar上的空白时间段时,它会在该空白单元格上绘制一个矩形。所以,如果我的slotDuration是30分钟,那么代表30分钟。我也可以将光标拖到多个单元格上并选择一个自定义范围。但我需要做的是,当用户单击(而不是拖动)单元格时,选择并绘制2个单元格的矩形(代表1小时)。这可能吗?我无法更改slotDuration。 如果我将snapDuration更改为1小时,它可以工作,但不幸的是,我也无法更改它。 我正在寻找的是一种重写event.end的方法,但这并不奏效。单击时选择多个时间段

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

上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代码,这将是很好的。

+0

@downvoter:我怎样才能改善这个问题? – Leo 2014-12-03 21:10:18

回答

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); 
       } 
      } 
     }