FullCalendar: установить конец события в функции удаления - PullRequest
2 голосов
/ 13 ноября 2010

У меня есть возможность перетаскивать внешние события в календарь с поведением по умолчанию времени начала, когда событие было отброшено.Я хотел бы установить поведение по умолчанию, чтобы также установить время окончания события через 1 час после времени начала.Это кажется тривиальным, но я не могу заставить его работать.Ниже приведена моя функция выпадения (по сути, демонстрация предметов, которые можно сбрасывать, плюс 1 строка.)

drop: function(date, allDay) { // this function is called when something is dropped

    // retrieve the dropped element's stored Event Object
    var originalEventObject = $(this).data('eventObject');
    // we need to copy it, so that multiple events don't have a
    // reference to the same object
    var copiedEventObject = $.extend({}, originalEventObject);

    // assign it the date that was reported
    copiedEventObject.start = date;
    copiedEventObject.end = date.setHours(date.getHours()+1); // <- should be working
    copiedEventObject.allDay = allDay;

    // render the event on the calendar
    // the last `true` argument determines if the event "sticks"
    // (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
    $('#calendar').fullCalendar('renderEvent', copiedEventObject, true);

        // is the "remove after drop" checkbox checked?
    if ($('#drop-remove').is(':checked')) {
    // if so, remove the element from the "Draggable Events" list
    $(this).remove();
    }
},

Есть идеи?

Спасибо, Джо Чин

Ответы [ 3 ]

5 голосов
/ 13 ноября 2010

Проблема в этом примере для того, что вы пытаетесь сделать, состоит в том, что allDay имеет значение true, поэтому он игнорирует часы, указанные в начальной дате. Если вы были счастливы, скажем, в полночь - по умолчанию 1 час ночи, вот что вы можете сделать:

var tempDate = new Date(date);  //clone date
copiedEventObject.start = date;
copiedEventObject.end = new Date(tempDate.setHours(tempDate.getHours()+1)); // <-- make sure we assigned a date object
copiedEventObject.allDay = false;  //< -- only change
....

РЕДАКТИРОВАТЬ: ОК, я на самом деле пробовал эту версию. Кажется, работает.

1 голос
/ 26 июля 2013

Свойство календаря

http://arshaw.com/fullcalendar/docs/agenda/defaultEventMinutes/ устанавливает время окончания по умолчанию с начала

0 голосов
/ 22 августа 2014

Я не смог заставить решение, опубликованное Райли, работать должным образом. Это поместило бы внешнее событие в заголовок календаря, и при просмотре недели событие было бы тонкой линией (казалось, свернуто) или вообще не появлялось Это может быть разницей в версии fullCalendar (я использую v2 of fullCalendar). Во второй версии fullCalendar я смог заставить это работать без каких-либо проблем с событием в любом из представлений календаря.

drop: function (date, jsEvent, ui) { // this function is called when an external element is dropped.

    // retrieve the dropped element's stored Event Object
    var originalEventObject = $(this).data('eventObject');

    // we need to copy it, so that multiple events don't have a reference to the same object
    var copiedEventObject = $.extend({}, originalEventObject);

    var sdate = $.fullCalendar.moment(date.format());  // Create a clone of the dropped date.
    sdate.stripTime();        // The time should already be stripped but lets do a sanity check.
    sdate.time('08:00:00');   // Set a default start time.
    copiedEventObject.start = sdate;

    var edate = $.fullCalendar.moment(date.format());  // Create a clone.
    edate.stripTime();        // Sanity check.
    edate.time('12:00:00');   // Set a default end time.
    copiedEventObject.end = edate;

    // render the event on the calendar
    // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
    $('#calendar').fullCalendar('renderEvent', copiedEventObject, true);

},
...