2016-11-22 17 views
5

Używam wtyczki FullCalendar i staram się, aby nie można było upuścić nowego wydarzenia, gdy jest ono przeciągane do czegoś, co jest poza godzinami pracy. Mam to, więc nie możesz przeciągnąć na żadną datę przed bieżącą datą, ale nie możesz się zorientować, jak zapobiegać, mówiąc, że należy przeciągnąć weekend.FullCalendar zapobiega utracie wydarzenia poza godzinami pracy

Nie chcę rozwiązania zakodowanego na sztywno, gdzie muszę zrobić wypowiedź, jeśli nie specjalnie na weekend, bo co, jeśli chcę dodać godziny pracy, powiedzmy w środę w konkretny tydzień i dopuszczam tylko między 13:00 a 16:00? Potrzebuję więc dynamicznego rozwiązania, które mógłbym przekazać niektórym JSONom, takim jak zdarzenia: uchwytami i firmami, które również mogą obsłużyć.

$(document).ready(function() { 
    /* initialize the external events 
    -----------------------------------------------------------------*/ 
    $('#external-events .fc-event').each(function() { 
     // store data so the calendar knows to render an event upon drop 
     $(this).data('event', { 
      title: $.trim($(this).text()), // use the element's text as the event title 
      stick: true // maintain when user navigates (see docs on the renderEvent method) 
     }); 
     // make the event draggable using jQuery UI 
     $(this).draggable({ 
      zIndex: 999, 
      revert: true,  // will cause the event to go back to its 
      revertDuration: 0 // original position after the drag 
     }); 
    }); 
    /* initialize the calendar 
    -----------------------------------------------------------------*/ 
    $('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     editable: true, 
     droppable: true, // this allows things to be dropped onto the calendar 
     drop: function() { 
      // is the "remove after drop" checkbox checked? 
      if ($('#drop-remove').is(':checked')) { 
       // if so, remove the element from the "Draggable Events" list 
       $(this).remove(); 
      } 
     }, 
     /* This constrains it to today or later */ 
     eventConstraint: { 
      start: moment().format('YYYY-MM-DD'), 
      end: '2100-01-01' // hard coded must have 
     }, 
     businessHours: { 
      start: moment().format('HH:mm'), /* Current Hour/Minute 24H format */ 
      end: '17:00' // 5pm 
     } 
    }); 
}); 

o to skrzypce z moim obecnym przykładzie http://jsfiddle.net/htexjtg6/

Odpowiedz

3

jeden problem masz jest ponieważ inicjowane zdarzenia nie ma czasu trwania - tak fullcalendar nie wiem, czy wydarzenia nakładają ograniczenia i businesshours po upuszczeniu. Samo ustawienie początku/końca może rozwiązać ten problem.

$(this).data('event', { 
    title: $.trim($(this).text()), // use the element's text as the event title 
    stick: true, // maintain when user navigates (see docs on the renderEvent method) 
    start: moment(), 
    end: moment(), 
}); 

premia: w inicjalizatorze fullcalendar ustawić defaultTimedEventDuration:'01:00:00', (domyślny czas trwania wydarzenia jest 2 godziny) - ustaw tę wartość w zależności od dziedziny aplikacja dotyczy.

Informacje o różnych godzinach w różnych dniach; Businesshours może być tablicą. - (które mogą pochodzić z funkcji powrocie jsonarray (od jsonArrays są w pełni wykwalifikowani js) Zobacz https://fullcalendar.io/docs/display/businessHours/

businessHours: [ 
    { 
     dow: [ 1, 2, 3 ], // Monday, Tuesday, Wednesday 
     start: '08:00', // 8am 
     end: '18:00' // 6pm 
    }, 
    { 
     dow: [ 4, 5 ], // Thursday, Friday 
     start: '10:00', // 10am 
     end: '16:00' // 4pm 
    } 
], 
eventConstraint:"businessHours", 

zobaczyć ten skrzypce http://jsfiddle.net/htexjtg6/11/ na rozwidleniu kodu (z businesshours roboczych)

+0

Wspomniałem w nagród, że nadal mogę przeciągać nowe wydarzenie do daty, nawet jeśli miało ono określone ograniczenie czasowe ... prawdopodobnie opóźniając czas do najwcześniejszego, które jest wymienione w godzinach pracy. nie można tego zrobić za pomocą FullCalendar i można dodawać zdarzenia tylko do widoku dnia? – eqiz

+0

@eqiz To działa na skrzypcach, jeśli dobrze cię rozumiem . – VisualBean

+0

Chciałem wspomnieć o tym, że mogę to robić w comiesięcznym widoku w nagrodę. Miałem na myśli to, że to, co mówisz, jest niemożliwe, można to zrobić tylko za pomocą widoku tygodniowego lub codziennego z przeciąganiem wydarzenia, a nie co miesiąc? – eqiz

Powiązane problemy