我正在尝试做一个具有多个视图选项的网络日历。 我有一个"学生"视图和一个"项目"视图(都是 FullCalendar 中的时间线视图,其中"学生"和"项目"是资源(。
问题是我不知道如何动态地更改资源。我试过这个:
var resources = 'students';
$('#calendar').fullCalendar({
resources: {
url: 'resource-load.php',
type: 'POST',
data: {
'data': resources
}
}
});
当我改变视图时:
switch (selected) {
case 'general':
$('#calendar').fullCalendar( 'changeView', 'month');
break;
case 'students':
$('#calendar').fullCalendar( 'changeView', 'timelineDay');
$('#calendar').fullCalendar('option','resourceLabelText','Students');
resources = 'students';
$('#calendar').fullCalendar('refetchResources');
break;
case 'proyects':
$('#calendar').fullCalendar( 'changeView', 'timelineDay');
$('#calendar').fullCalendar('option','resourceLabelText','Proyects');
resources = 'proyects';
$('#calendar').fullCalendar('refetchResources');
break;
default: break;
}
它正确加载学生,但在我更改视图时不会更改资源。 我也尝试使用资源作为函数,但我真的不知道如何使其工作。
现在我有这个:
var resources = 'students';
$('#calendar').fullCalendar({
resources: function(callback) {
getResources(function(resourceObjects) {
callback(resourceObjects);
});
}
});
还有一个功能:
function getResources(handleData) {
$.ajax({
url:"resource-load.php",
data: {
'data': resources
},
success:function(data) {
handleData(data);
}
});
}
和其他事件和以前一样。 但现在它甚至不加载事件。
你在第一个例子中做了什么,例如resources = 'students';
本质上是没有意义的。resources
本身只是一个变量,与 fullCalendar 无关。
我想你是在想象它会影响data: { 'data': resources }
,但fullCalendar之前已经运行了该代码,并像当时一样使用了resources
的值。它不会再次运行该代码或获取resources
变量的新值。
如果您只是希望每次获取资源时都能将"数据"的动态值传递到服务器中,则需要按照以下文档将"resources"fullCalendar 选项实现为自定义函数:fullcalendar.io/docs/resource_data/resources_function 。然后,您可以将所需的任何值传递给服务器以及fullCalendar提供的值。
您的第二个代码示例正是按照我在注释中写的内容执行此操作的。它唯一的问题是,根据您之前的示例,ajax 调用定义是错误的。您需要覆盖某些默认值,并在$.ajax
选项中设置以下附加字段:
method: "POST"
和
dataType: "json"
(在第一个示例中,fullCalendar 已经为您静默地设置了 dataType,但现在您正在执行自定义版本,因此您必须自己完成,并且您也忘记再次设置 HTTP 方法。