Время окончания на удаленном внешнем элементе в fullcalendar не применяется до тех пор, пока его не перетащили на новую позицию. - PullRequest
0 голосов
/ 02 марта 2012

Я хочу иметь возможность перетаскивать внешние элементы и помещать их в свой полный календарь. В обратном обратном вызове я запрашиваю страницу, которая возвращает рассчитанное время возврата (например, «2012-03-03 08:00:00») для типа причины события. Дата получена и применена к свойству .end события. И событие добавляется в календарь, но его значение по умолчанию составляет 2 часа, в результате чего событие имеет неправильное время окончания (должно продолжаться до следующего «08:00»). Если я переключаюсь на просмотр недели, отображается правильное время окончания, а также если я переключаюсь обратно Также, если я перетаскиваю событие с неверным конечным временем siplayed на новую позицию в календаре, оно перерисовывается с правильным конечным временем («08:00»).

Итак, кто-нибудь знает, как симулировать dragEventStop или что-то еще, что нужно для правильного рендеринга?

Код:

drop: function(date, allDay) { // this function is called when something is dropped
        // retrieve the dropped element's stored Event Object
        var originalEventObject = jQuery(this).data('eventObject');

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

        // assign it the date that was reported
        copiedEventObject.start = date;
        //Fetch endtime from loadReturntime
        var opt = {session: '<%= GetVariable('session') %>', cmd: 'hv_get_returntime', reasoncode_id: ''+jQuery(this).attr('custom:reasoncode')+'', fromtime: ISODateString(date)};                 
        jQuery.get('engine.wsc', opt, function(data) {                                  
            copiedEventObject.end = new Date(data);             
        });

        copiedEventObject.allDay = false;

        // render the event on the calendar

        jQuery('#calendar').fullCalendar('renderEvent', copiedEventObject, true);                                           
        },

1 Ответ

0 голосов
/ 05 марта 2012

Я обнаружил, что ответ таков: обратный вызов jQuery.get () обрабатывается после (конечно) оставшихся строк функции. Для этого событие обрабатывается до обработки обратного вызова и установки правильной даты окончания. Решение состоит в том, чтобы добавить рендеринг в обратный вызов get (). Например:

drop: function(date, allDay) { // this function is called when something is dropped
   // retrieve the dropped element's stored Event Object
   var originalEventObject = jQuery(this).data('eventObject');

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

   var opt = {session: '<%= GetVariable('session') %>', cmd: 'hv_get_returntime', reasoncode_id: ''+jQuery(this).attr('custom:reasoncode')+'', fromtime: ISODateString(date)}; 
   jQuery.get('engine.wsc', opt, function(data) {                                   
          copiedEventObject.end = new Date(data);               
          // assign it the date that was reported
          copiedEventObject.start = date;                                       
          copiedEventObject.allDay = allDay;
          // render the event on the calendar
          jQuery('#calendar').fullCalendar('renderEvent', copiedEventObject, true);                                                             
   });                              
},
...