首页 > 解决方案 > 如何为 fullcalendar.io 获得正确的格式

问题描述

我一直在尝试在日历中显示我的数据库条目。第 1 步是从服务器获取 json 格式的数据。第 2 步:遍历数据以构建数组。第 3 步根据 fullcalendar 规范构建数组数组。

我似乎对第 1 步和第 2 步做得很好,如果我剪切并粘贴结果,如图所示,它可以工作。日记条目显示在它们应该出现的位置。呜呼。然而,随着时间的推移,数据会每天发生变化,并且希望它能够自动工作而无需剪切和粘贴。

大多数时候我得到一个索引数组 0:... 1:... 2:... 我认为这可能是为什么它不起作用。当我将文本变量粘贴为数据(文本)时,我什么也得不到,当我将数据推送到数组中时,它的格式似乎没问题,但仍然没有显示。最令人沮丧。

事实证明,我采用的方法是正确的。然而,我使用了一个变量并将其称为日历,它在工作中抛出了一个扳手。这是一个编码问题,但在页面的其他地方有一个问题。

这是我已经分解的代码以及我必须到达的地方,这并不优雅,因为我已经将它带到了一个文本级别,以便我可以剪切和粘贴文本进行测试 - 当我这样做时:

 // get appointments
  let events=new Array(); let apptDeat=new Array(); let start; let end; let id; let title=' '; let description=' ';
  $.get('appointmentsList', function(apptList) {
    console.log('apptList1:', apptList, ' Count: ',apptList.Count);
    for (let x=0; x < apptList.Count; ++x) { 
      if (apptList.Items[x].oDdate) {
        start = moment(apptList.Items[x].oDdate).format("YYYY-MM-DD");  start += 'T'+apptList.Items[x].oDtime;
      } else { start =0; }
      if (apptList.Items[x].oDEdate) {
        end   = moment(apptList.Items[x].oDEdate).format("YYYY-MM-DD");    end   += 'T'+apptList.Items[x].oDEtime;
      } else { end =0; }          
      if (apptList.Items[x].oDNumber) { title       = apptList.Items[x].oDNumber; } else { title=' '; }
      if (apptList.Items[x].oDTopic)  { description = apptList.Items[x].oDTopic;  } else { description=' '; }
      id=apptList.Items[x].Id;

      apptDeat +=  '{"title":"'+title+'","description":"'+description+'","id":"'+id+'","start":"'+start+'","end":"'+end+'","color":"blue" },';
    }
    apptDeat = apptDeat.substring(0, apptDeat.length-1);
    events.push(apptDeat);
    console.log('event: ', event, ' events: ', events, ' apptDeat: ', apptDeat);
    let today = new Date();
    let dateInput;
    $('#calendar').fullCalendar({
      eventClick: function(eventObj) { appDetail(eventObj.id); },
      events: events
      //[ {"title":"EVE0106820","description":" ","id":"apptDetails:8171433761442206","start":"2019-02-12T08:30","end":"2019-02-13T05:31" },{"title":"EVE0107006","description":" ","id":"apptDetails:8171581388491175","start":"2019-02-07T08:31","end":"2019-02-08T17:31" },{"title":"EVE0106551","description":"AWS DevOps","id":"apptDetails:8171864774477945","start":"2019-01-28T09:00","end":"2019-01-31T16:00" } ]
    });

顺便说一句,我正在使用 Chrome 和开发人员工具来查看变量控制台到日志。

标签: javascriptjsonfullcalendar

解决方案


这个问题不清楚具体问题是什么,但似乎有些事情已经结束了。

根据FullCalendar docs,该events属性可以是多个东西,包括一组对象,这看起来像是您试图传递它。这行代码:

apptDeat +=  '{"title":"'+title+'","description":"'+description+'","id":"'+id+'","start":"'+start+'","end":"'+end+'","color":"blue" },';

看起来很可怕。如果您尝试构建要传入的对象数组(这是他们的文档所说的),那么这不是方法。您正在构建一串“对象”,而不是对象数组。您继续附加到此字符串,然后您只需将此字符串推送到一个空数组中。我假设你剩下的是一个由一个混乱的字符串组成的数组。

apptDeat不应该是一个数组,它应该是一个对象,并且在你的 for 循环中,你应该将值作为一个对象分配给 apptDeat,然后将其推送到你的events数组,如下所示:

apptDeat = {
  title,
  description,
  id,
  start,
  end,
  color: "blue"
};

events.push(apptDeat);

旁注,哎呀@那个代码格式。希望这只是 StackOverflow 搞砸了。


推荐阅读