Javascript Fullcalendar:如何使用多个事件显示多个资源

Javascript Fullcalendar:如何使用多个事件显示多个资源,javascript,fullcalendar,fullcalendar-4,Javascript,Fullcalendar,Fullcalendar 4,我正在尝试使用Fullcalendar,在这里我需要显示多个资源和相应的多个事件。同一来源可能有更多事件,包括超售情况。 在前端,我使用Ajax分别检索资源和事件的数据。 以下是我的代码;但它不起作用。它获取资源和事件,显示资源,但无法显示相应的事件。 我怎么做?非常感谢 var calendar = new FullCalendar.Calendar(calendarEl, { schedulerLicenseKey: 'GPL-My-Project-Is-Open-Sourc

我正在尝试使用Fullcalendar,在这里我需要显示多个资源和相应的多个事件。同一来源可能有更多事件,包括超售情况。 在前端,我使用Ajax分别检索资源和事件的数据。 以下是我的代码;但它不起作用。它获取资源和事件,显示资源,但无法显示相应的事件。 我怎么做?非常感谢

var calendar = new FullCalendar.Calendar(calendarEl, {
        schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source',
        plugins: [ 'interaction', 'resourceTimeline' ],
        timeZone: 'Europe/Rome',
        defaultDate: today,
        locale: 'it',
        views: {
            timelineFourDays: {
              type: 'timeline'
              //,duration: { months: 4 }
            }
        },
        defaultView: 'resourceTimelineMonth',
        lang: 'it',
        aspectRatio: 1.5,
        header: {
            left: 'prev,next',
            center: 'title',
            right: 'resourceTimelineDay,resourceTimelineWeek,resourceTimelineMonth,resourceTimelineYear'
        },
        footer: {
            left: 'prev,next',
            center: 'title',
            right: 'resourceTimelineDay,resourceTimelineWeek,resourceTimelineMonth,resourceTimelineYear'
        },
        resourceAreaWidth: '30%',
        resourceLabelText: 'IMPIANTI',
        resourceGroupField: 'nome_tipologia',
        resourceOrder: 'id',
        resourcesInitiallyExpanded: true,
        resourceText: 'title',
        refetchResourcesOnNavigate: true,
        resourceColumns: [
            {
                labelText: 'IMPIANTO',
                field: 'id_impianto',
                width: '5%'
            },
            {
                labelText: 'IDENTIFICATIVO',
                field: 'impianto_codifica',
                width: '15%'
            }
            ,
            {
                labelText: 'COMUNE',
                field: 'nome_comune',
                width: '15%'
            },
            {
                labelText: 'ARTICOLO',
                field: 'nome_articolo',
                width: '15%'
            }
          ],
        resources:{
            url: '/listallimpiantos',
            method: 'get',
            _token: CSRF_TOKEN
        },
        resourceRender: function(renderInfo) {
             renderInfo.el.style.backgroundColor = 'green';
             renderInfo.el.style.color = '#ffffff';
        },
        eventSources:{
            url: '/listimpiantosperofferta',
            method: 'get',
            _token: CSRF_TOKEN,
            resourceIds:'title'
        },
        eventRender: function(event, element) {
            $(element).tooltip({title: event.title});
             if (event.statovendita == 'VENDUTO') {
                element.css("background-color", '#378006');
              }
             if (event.statovendita == 'OPZIONATO') {
                element.css("background-color", '#FFA500');
              }

        },
        eventColor: '#378006',
        eventBackgroundColor: event.color,
        editable: true,
        eventStartEditable: true,
        eventResizableFromStart: true,
        eventDurationEditable: true,
        eventResize: function(info) {
            alert("Per il cliente " + info.event.title + " dal " + info.event.start.toISOString() + " al " + info.event.end.toISOString());
            if (!confirm("Confermi?")) {
              info.revert();
            } else {
              alert('Aggiornamento sul db!');
            }
          },
        selectable: true,
        selectAllow: function(select) {
            return moment().diff(select.start) <= 0
         },

                    });
                }
    });

    calendar.render();

  });
var calendar=newfullcalendar.calendar(calendarEl{
SchedulerLisceKey:“GPL我的项目是开源的”,
插件:['交互','资源时间线'],
时区:“欧洲/罗马”,
日期:今天,,
地点:'它',
观点:{
时限四天:{
键入:“时间线”
//,持续时间:{个月:4}
}
},
defaultView:“resourceTimelineMonth”,
朗:“它”,
方面:1.5,
标题:{
左:“上一个,下一个”,
中心:'标题',
右图:“resourceTimelineDay、resourceTimelineWeek、resourceTimelineMonth、resourceTimelineYear”
},
页脚:{
左:“上一个,下一个”,
中心:'标题',
右图:“resourceTimelineDay、resourceTimelineWeek、resourceTimelineMonth、resourceTimelineYear”
},
resourceAreaWidth:'30%',
resourceLabelText:“IMPIANTI”,
resourceGroupField:“nome_tipologia”,
resourceOrder:'id',
资源扩张:没错,
resourceText:“标题”,
参考资源导航:正确,
资源列:[
{
labelText:“IMPIANTO”,
字段:“id_impianto”,
宽度:“5%”
},
{
labelText:“IDENTIFICATIVO”,
字段:“impianto_编目”,
宽度:“15%”
}
,
{
labelText:“COMUNE”,
字段:“nome_comune”,
宽度:“15%”
},
{
labelText:“ARTICOLO”,
字段:'nome_articolo',
宽度:“15%”
}
],
资源:{
url:“/listalImpiantos”,
方法:“get”,
_令牌:CSRF_令牌
},
resourceRender:函数(renderInfo){
renderInfo.el.style.backgroundColor='绿色';
renderInfo.el.style.color='#ffffff';
},
事件来源:{
url:“/ListImpiantSperofferta”,
方法:“get”,
_令牌:CSRF_令牌,
ResourceId:“标题”
},
eventRender:函数(事件,元素){
$(元素)。工具提示({title:event.title});
如果(event.statovendta=='VENDUTO'){
css(“背景色”,“#378006”);
}
如果(event.statovendta=='OPZIONATO'){
css(“背景色”,“FFA500”);
}
},
eventColor:“#378006”,
eventBackgroundColor:event.color,
是的,
eventStartEditable:true,
eventresizeblefromstart:true,
eventDurationEditable:true,
eventResize:函数(信息){
警报(“每个il客户端”+info.event.title+“dal”+info.event.start.toISOString()+“al”+info.event.end.toISOString());
如果(!确认(“协商?”){
info.revert();
}否则{
警报('Aggiornamento sul db!');
}
},
是的,
选择允许:功能(选择){

return moment().diff(select.start)您的
eventSources
定义不正确

for
eventSources
声明必须为此选项提供数组。但是,您提供了一个对象

由于您只提供一个事件源,因此可以

a) 将
eventSources
更改为
events
(因为将接受单个对象),即

b) 给
eventSources
一个包含单个项的数组:

eventSources: [{
    url: '/listimpiantosperofferta',
    method: 'get',
    _token: CSRF_TOKEN,
    resourceIds:'title'
}],
resourceIds: ["title"]

您可能遇到的另一个问题是类似的数据类型错误:事件源对象的
resourceIds
选项需要一个数组(您同样应该这样做),而不是字符串

因此,为了解决这个问题,您可以a)改用单数
resourceId
选项:

resourceId: 'title'
或者继续使用
resourceIds
,但给它一个包含单个项的数组:

eventSources: [{
    url: '/listimpiantosperofferta',
    method: 'get',
    _token: CSRF_TOKEN,
    resourceIds:'title'
}],
resourceIds: ["title"]
始终记得仔细研究文档,确保匹配相关的语法、数据类型、选项名称等。由于JavaScript没有编译时类型检查,因此很容易忽略这类问题,而且它也经常会默默地失败。这就是为什么在编写之前必须密切注意示例和规范的原因手