Javascript Fullcalendar:如何使用多个事件显示多个资源
我正在尝试使用Fullcalendar,在这里我需要显示多个资源和相应的多个事件。同一来源可能有更多事件,包括超售情况。 在前端,我使用Ajax分别检索资源和事件的数据。 以下是我的代码;但它不起作用。它获取资源和事件,显示资源,但无法显示相应的事件。 我怎么做?非常感谢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
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
定义不正确
foreventSources
声明必须为此选项提供数组。但是,您提供了一个对象
由于您只提供一个事件源,因此可以
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没有编译时类型检查,因此很容易忽略这类问题,而且它也经常会默默地失败。这就是为什么在编写之前必须密切注意示例和规范的原因手