2016-11-22 5 views
5

Ich benutze das FullCalendar-Plugin und versuche, es so zu machen, dass Sie ein neues Ereignis nicht löschen können, wenn es in etwas außerhalb der Geschäftszeiten gezogen wird. Ich habe es so, dass Sie nicht in ein beliebiges Datum vor dem aktuellen Datum ziehen können, aber nicht herausfinden können, wie verhindern Sie, dass das Wochenende dorthin gezogen wird.FullCalendar verhindern, dass das Ereignis außerhalb der Geschäftszeiten gelöscht wird

Ich möchte keine hartcodierte Lösung, wo ich eine if than-Anweisung speziell für das Wochenende tun muss, denn was, wenn ich Geschäftszeiten hinzufügen möchte, sagen Mittwoch an einer bestimmten Woche und nur zwischen 13:00 und 16:00 erlauben? Also brauche ich eine dynamische Lösung, die ich JSON wie die Ereignisse weitergeben kann: handles und die businessHours können auch damit umgehen.

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

hier ist eine Geige meines aktuelles Beispiel http://jsfiddle.net/htexjtg6/

Antwort

3

ein Problem, das Sie ist haben, weil die initialisierten Ereignisse keine Dauer haben - so wissen fullcalendar nicht, wenn die Ereignisse Zwänge und Geschäftszeiten überlappen wenn sie fallen gelassen werden. Einfach Start/Ende einstellen kann das lösen.

$(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(), 
}); 

Bonus: im fullcalendar initializer gesetzt defaultTimedEventDuration:'01:00:00', (Standarddauer der Ereignisse ist 2 Stunden) - diesen Wert nach der Domäne der Anwendung gilt.

Über verschiedene Zeiten an verschiedenen Tagen haben; Geschäftszeiten kann ein Array sein. - (die aus einer Funktion zurückkehr jsonarray kommen könnte (da jsonArrays voll qualifizierte js) sind https://fullcalendar.io/docs/display/businessHours/ siehe

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", 

sehen diese Geige http://jsfiddle.net/htexjtg6/11/ für eine Gabel des Codes (mit Arbeitsgeschäftszeiten)

+0

Ich hatte in der Bounty erwähnt, dass ich das neue Ereignis immer noch auf das Datum ziehen könnte, selbst wenn es eine bestimmte Zeitbeschränkung hätte ... möglicherweise die Zeit bis zur frühesten, die während der Geschäftszeiten verfügbar ist Das ist unmöglich mit FullCalendar zu machen und kann nur Ereignisse zur täglichen Ansicht hinzufügen? – eqiz

+0

@eqiz Das funktioniert in der Geige, wenn ich dich richtig verstehe . – VisualBean

+0

Ich wollte den Hinweis erwähnen, dass ich es in der monatlichen Kopfgeldausgabe machen kann. Ich meinte, dass Teil ist, was Sie sagen, ist unmöglich, es kann nur mit einer wöchentlichen oder täglichen Ansicht mit dem Ziehen des Ereignisses und nicht ein monatliches getan werden? – eqiz

Verwandte Themen