2014-10-27 237 views
3

我正在申请FullCalendarFullCalendar,可以设置可选false,但允许选择插槽

我注意到,selectable设置为true,用户能够选择不需要的多个星期或时间段。另一方面,当我将selectable设置为false时,我不能再使用用户选择时隙时要触发的选择操作。有没有什么方法selectable功能将保持为false,但仍然可以单独选择每个时隙,而不是时隙组的一部分。

这里是我的代码,如阵列穿过PHP:

'options'=>array(
'header'=>array(
    'left'=>'prev,next,today', 
    'center'=>'title', 
    'right'=> 'month,agendaWeek,agendaDay', 
), 
'minTime' => '09:00:00', 
'maxTime' => '20:00:00', 
'slotDuration' => '01:00:00', 
'slotEventOverlap' => false, 
'defaultTimedEventDuration' => '01:00:00', 
'allDaySlot' => false, 
'allDay' => false, 
'lazyFetching'=>true, 
'weekends' => false, 
'selectable' => true, 
'height' => 'auto', 
'contentHeight' => '150', 
// 'selectHelper' => true, 
// 'events'=>array(), // pass array of events directly 
'select' => new CJavaScriptExpression("function(start, end, jsEvent, view) { 
        var currdisplay = view.name; 
        var check = Date.parse(start)/1000; 
        var today = Date.parse(new Date())/1000; 
        if (currdisplay != 'month' && check >= today) { 
         var start1 = Date.parse(start)/1000; 
         var end = Date.parse(start)/1000 + 3600; 
         window.location.href = \"www.somelink.com/?from=\" + start1 + \"&to=\" + end; 
         }}"), 
'dayClick' => new CJavaScriptExpression("function(date, jsEvent, view) { 
        var currdisplay = view.name; 
        if (currdisplay == 'month') { 
         $('.calendar').fullCalendar('gotoDate', date); 
         $('.calendar').fullCalendar('changeView', 'agendaWeek'); 
        }}"), 

我目前的修复,或许你可以在代码块见:

var start1 = Date.parse(start)/1000; 
var end = Date.parse(start)/1000 + 3600; 

这两行确认如果用户选择5个时间段,在开始时间后5小时后设置结束时间为1小时(3600秒),但不是5个小时后,但我不满意这个解决方案,因为我没有发现它干净,不喜欢那selectable功能仍然可用。

回答

3

的时隙不完美的解决方案:

这是否工作不够好,你呢?

http://jsfiddle.net/3E8nk/739/

select: (function() { 
    var humanSelection = true; 
    return function(start, end, jsEvent, view) { 
     if(humanSelection) { 
      humanSelection = false; 
      $('#calendar').fullCalendar('select', start); 
      humanSelection = true; 
     } 
    }; 
})(), 

解天:

尝试使用天点击设置背景颜色,你想要什么,而不是。

See fiddle

dayClick: (function() { 
    var lastThis; 
    return function(date, jsEvent, view) { 
     if(lastThis) 
      lastThis.css('background-color', 'white'); 
     lastThis = $(this); 
     $(this).css('background-color', 'lightblue'); 
    } 
})(), 
+0

喜理查德,实际上之后什么IM是某种slotClick而不是一天的点击,我想我的代码上选择一个独特的时间段,而不是一组时隙 – nikolas 2014-10-27 22:27:36

+0

来trigered @尼古拉斯这不能像图书馆那样适当地完成,但不应该很难延长。我在上面提供了一个不完美的解决方案,但是如果您决定在源代码上工作,那么我认为arshaw会欣赏拉请求:) – 2014-10-28 00:53:07

+0

好吧,它似乎也有诀窍..可能从fullcalendar没有本地选项,但这似乎工作确定:) – nikolas 2014-10-28 12:35:54