2016-11-08 7 views
0

Я пытаюсь настроить систему расписания в полном календаре. С моим текущим кодом, когда вы нажимаете на день в календаре, он отображает модальный, который отображает день и время, когда вы нажимали. Затем этот модальный способ позволяет добавлять события в календарь на основе этого дня и времени.FullCalendar не может определить правильный формат moment.js

Я хочу, чтобы приложение только пропускало день на клике и пропускало время через модальное.

Если я отформатирую дату до ("HH:mm:ss YYYY-MM-DD"), я могу пройти в правильную дату, и все хорошо. Единственное, что я не хочу, чтобы часть YYYY-MM-DD появилась в моем модальном режиме. Если я обрезаю его до ("HH:mm:ss"), он обновляет календарь, но обновляет это конкретное время на каждый день в календаре на неопределенный срок.

Как я могу показать только время в модальном поле, все еще проходя год, месяц и день в календаре?

Мой код

let isPast = (date) => { 
    let today = moment().format(); 
    return moment(today).isAfter(date); 
}; 


Template.events.onCreated(() => { 
    let template = Template.instance(); 
    template.subscribe('events'); 
}); 

Template.events.onRendered(() => { 
    $('#events-calendar').fullCalendar({ 
    header: { 
     center: 'month,agendaWeek' 
    }, 


    events(start, end, timezone, callback) { 
     let data = Events.find().fetch().map((event) => { 
     event.editable = !isPast(event.start); 
     return event; 
     }); 

     if (data) { 
     callback(data); 
     } 
    }, 
    eventRender(event, element) { 
     element.find('.fc-content').html(
     `<h4>${ event.title }</h4> 
     <p class="guest-count">${ event.guests } Guests</p> 
     <p class="type-${ event.type }">#${ event.type }</p> 
     ` 
     ); 
     }, 
     eventDrop(event, delta, revert) { 
     let date = event.start.format(); 
     if (!isPast(date)) { 
     let update = { 
      _id: event._id, 
      start: date, 
      end: date 
     }; 

     Meteor.call('editEvent', update, (error) => { 
      if (error) { 
      Bert.alert(error.reason, 'danger'); 
      } 
     }); 
     } else { 
     revert(); 
     Bert.alert('Sorry, you can\'t move items to the past!', 'danger'); 
     } 
    }, 
     dayClick(date) { 
     Session.set('eventModal', { type: 'add', date: date.format("HH:mm:ss YYYY-MM-DD") }); 
     $('#add-edit-event-modal').modal('show'); 
    }, 
    eventClick(event) { 
     Session.set('eventModal', { type: 'edit', event: event._id }); 
     $('#add-edit-event-modal').modal('show'); 
    } 
    }); 
Tracker.autorun(() => { 
    Events.find().fetch(); 
    $('#events-calendar').fullCalendar('refetchEvents'); 
    }); 
}); 

И

let closeModal =() => { 
    $('#add-edit-event-modal').modal('hide'); 
    $('.modal-backdrop').fadeOut(); 
}; 



Template.addEditEventModal.helpers({ 
    modalType(type) { 
    let eventModal = Session.get('eventModal'); 
    if (eventModal) { 
     return eventModal.type === type; 
    } 
    }, 
    modalLabel() { 
    let eventModal = Session.get('eventModal'); 

    if (eventModal) { 
     return { 
     button: eventModal.type === 'edit' ? 'Edit' : 'Add', 
     label: eventModal.type === 'edit' ? 'Edit' : 'Add an' 
     }; 
    } 
    }, 
    selected(v1, v2) { 
    return v1 === v2; 
    }, 
    event() { 
    let eventModal = Session.get('eventModal'); 

    if (eventModal) { 
     return eventModal.type === 'edit' ? Events.findOne(eventModal.event) : { 
     start: eventModal.date, 
     end: eventModal.date 
     }; 
    } 
    } 
}); 




Template.addEditEventModal.events({ 
    'submit form' (event, template) { 
    event.preventDefault(); 

    let eventModal = Session.get('eventModal'), 
     submitType = eventModal.type === 'edit' ? 'editEvent' : 'addEvent', 
     eventItem = { 
      title: template.find('[name="title"]').value, 
      start: template.find('[name="start"]').value, 
      end: template.find('[name="end"]').value, 
      type: template.find('[name="type"] option:selected').value, 
      guests: parseInt(template.find('[name="guests"]').value, 10) 
     }; 

    if (submitType === 'editEvent') { 
     eventItem._id = eventModal.event; 
    } 

    Meteor.call(submitType, eventItem, (error) => { 
     if (error) { 
     Bert.alert(error.reason, 'danger'); 
     } else { 
     Bert.alert(`Event ${ eventModal.type }ed!`, 'success'); 
     closeModal(); 
     } 
    }); 
    }, 
    'click .delete-event' (event, template) { 
    let eventModal = Session.get('eventModal'); 
    if (confirm('Are you sure? This is permanent.')) { 
     Meteor.call('removeEvent', eventModal.event, (error) => { 
     if (error) { 
      Bert.alert(error.reason, 'danger'); 
     } else { 
      Bert.alert('Event deleted!', 'success'); 
      closeModal(); 
     } 
     }); 
    } 
    } 
}); 

Image of app

ответ

0

Я отделить дату и время на две минуты, как это:

this.dayClick = function(when) { 
    this.event.selectedTime = when; 
    this.event.selectedDate = when.clone(); 

И затем используйте параметр datepicker для одного, а второй - другой. При сохранении в базе данных мне необходимо спеть их вместе для даты/времени

Смежные вопросы