【问题标题】:FullCalendar trying to fetch events from URL instead of arrayFullCalendar 尝试从 URL 而不是数组中获取事件
【发布时间】:2018-07-04 09:06:48
【问题描述】:

将 FullCalendar v3.9.0 与 jQuery v3.3.1 结合使用。我有一个从 MySQL 获取日历数据的 SailsJS 应用程序。

来自 MySQL 的 this.me.calendar 目前看起来像这样。

[{"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 请求。

如果我自己在事件中输入数组,它就可以工作。 events 函数中的 console.log 也返回相同的数组。

有没有办法让我简单地为 FullCalendar 输入我的数组,还是必须让它从 URL 获取 JSON?

【问题讨论】:

    标签: javascript jquery node.js fullcalendar sails.js


    【解决方案1】:

    我设法通过将我的事件函数内部的let events 更改为let events = that.me.calendar ? JSON.parse(that.me.calendar) : []; 来解决这个问题,现在正在显示事件。

    【讨论】:

    • 澄清一下,这是因为that.me.calendar 是一个包含一些 JSON 数据的字符串,而不是 URL。但是,如果没有上面的代码将其从 JSON 解析为 JS 数组,fullCalendar 不知道它应该是数据,因此它假定它是一个 URL(或 URL 的一部分)并尝试向它发出 HTTP 请求并从那里获取数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2014-03-05
    相关资源
    最近更新 更多