FullCalendar пытается извлечь события из URL вместо массива - PullRequest
0 голосов
/ 04 июля 2018

Использование FullCalendar v3.9.0 с jQuery v3.3.1. У меня есть приложение SailsJS, которое получает данные календаря из MySQL.

this.me.calendar из MySQL в настоящее время выглядит следующим образом.

[{"start":"2018-07-04T13:30:00","end":"2018-07-04T18:00:00","works":["2"]}]

И мой код FullCalendar выглядит следующим образом.

let that = this;
that.me.calendar = this.me.calendar;

$('#calendar').fullCalendar({
  header: {
    left: 'today prev,next',
    center: 'title',
    right: 'agendaWeek,agendaDay'
  },
  views: {
    week: {
      titleFormat: 'DD.MM.YYYY'
    }
  },
  defaultView: 'agendaWeek',
  locale: 'fi',
  weekends: false,
  scrollTime: '07:00',
  businessHours: {
    start: '7:00',
    end: '21:00',
  },
  events: function(start, end, timezone, callback) {
    let events = that.me.calendar ? that.me.calendar : [];
    console.log(events);
    callback(events);
  },
  editable: true,
  selectable: true,
  selectHelper: true,
  select: (start, end) => {
    let duration = (end - start) / 1000;
    if (duration == 1800) {
      // Set default duration to 1 hour
      end = start.add(30, 'mins');
      return $('#calendar').fullCalendar('select', start, end);
    }

    let eventData = {
      start: start,
      end: end,
      works: []
    }

    $('#calendar').fullCalendar('renderEvent', eventData);
    $('#calendar').fullCalendar('unselect');
  },
  eventClick: (event, element) => {
    $('#event-works').text(event.works.join(','));
    $('#start-date').text(moment(event.start).format('d.MM.YYYY HH:mm'));
    $('#end-date').text(moment(event.end).format('d.MM.YYYY HH:mm'));
    $('#workModal').modal('show');

    $('#add-work-to-event').click(() => {
      let work = $('#work').val();
      if(_.includes(event.works, work)) return;
      event.works.push(work);
      $('#event-works').text(event.works.join(','));
    });
  }
});

Хотя приведенный выше код не отправляет GET, он не отображает события в календаре. Однако, если я изменю события на events: this.me.calendar, консоль SailsJS отобразит GET /account/%22[%7B/%22start/%22:/%222018-07-04T13:30:00/%22,/%22end/%22:/%222018-07-04T18:00:00/%22,/%22works/%22:[/%222/%22]%7D]%22 (1ms 404).

Я также попытался изменить его на events: JSON.stringify(this.me.calendar), который все еще выдавал запрос GET в консоли.

Если я сам вписываю массив в события, он работает. Также console.log внутри функции events возвращает тот же массив.

Есть ли способ для меня, чтобы просто ввести свой массив для FullCalendar или я должен заставить его получить JSON из URL?

1 Ответ

0 голосов
/ 04 июля 2018

Мне удалось решить проблему, изменив let events внутри функции событий на let events = that.me.calendar ? JSON.parse(that.me.calendar) : [];, и теперь события отображаются.

...