我在使用全日历调度程序插件更新资源时遇到问题。我使用垂直资源视图。奇怪的是,这个问题在时间轴视图中没有发生。
我使用一个函数来(重新(获取资源,假设它很简单,例如:
var t = this;
t.someParam = false;
$(el).fullCalendar({
resources: function(callback){
//do stuff
if(t.someParam === true){
callback([{id: 1, title: 'title'}]);
}
else{
callback([{id: 2, title: 'title2'}]);
}
}
}
);
这意味着当我重新取回时,我会调用
$(el).fullCalendar('refetchResources')
获取有效(调用资源回调(。此外,在重新获取之前,我将一个参数(例如"someParam"(设置为某个值(true(,这会影响结果(参见示例(,只是为了模拟不同的结果。结果是一个工作数组,如果我调用
$(el).fullCalendar('getResources') //after refetch
预期的资源已添加到日历中。
问题是,资源不会在视图中呈现,直到我跳到另一个视图或更改日期。我尝试了"渲染"功能,但这不起作用。我不想使用"addResource"(最好(,即使这会立即呈现视图。我希望视图更新,就像"重新获取事件"一样。
我遇到了同样的问题。我使用 ajax 将结果作为数组获取,当重新获取资源被称为数组时,数组已更新但未在日历中呈现。
在 fullcalendar.io 文档中,它说
如果将资源选项指定为函数,则将其召回。如果将资源选项指定为 JSON 源,则会再次请求该选项。
所以我所做的只是从完整日历选项中的函数中获取结果,就像您在问题中写一些更新一样
resources: function(callback){
if(t.someParam) {
rooms=[{id: 1, title: 'It is TRUE!'},{id: 2, title: 'Resource 2'}]
}
else{
rooms=[{id: 3, title: 'It is False!'},{id: 4, title: 'Resource 4'}]
}
callback(rooms);
}
然后添加了一个自定义按钮,该按钮更改了 t.someParam 的值并调用重新获取
customButtons: {
addRemoveResource: {
text: 'refetchResources',
click: function() {
t.someParam=!t.someParam;
$calendar.fullCalendar('refetchResources');
}
}
试试这个 http://jsbin.com/gaviwuwave/edit?html,js,output