Ich war in der Lage, die Entprellen zu arbeiten, indem Sie die eventSources
und Rückgabe eines Array von Funktionen, eine für jede Ereignisquelle. Die getSources
Funktion ist einfach für die Bequemlichkeit. In der fullCalendar Konfiguration hätten wir:
...
eventSources: getSources(),
...
und die Funktionen Code:
let source1Params = {};
let source2Params = {};
let debouncedSource1 = debounce(
function() {
$.ajax({
url: 'source/1/feed',
dataType: 'json',
data: {
start: source1Params.start,
end: source1Params.end
},
success: function(response) {
// Parse the response into an event list
let eventList = ...
source1Params.callback(eventList);
}
});
}, 200
);
let debouncedSource2 = debounce(
function() {
$.ajax({
url: 'source/2/feed',
dataType: 'json',
data: {
start: source2Params.start,
end: source2Params.end
},
success: function(response) {
// Parse the response into an event list
let eventList = ...
source2Params.callback(eventList);
}
});
}, 200
);
function getSources() {
return [
{
id: 'source1',
events: (start, end, timezone, callback) => {
source1Params = {
'start': start,
'end': end,
'timezone': timezone,
'callback': callback
};
debouncedSource1();
}
},
{
id: 'source2',
events: (start, end, timezone, callback) => {
source2Params = {
'start': start,
'end': end,
'timezone': timezone,
'callback': callback
};
debouncedPlanned();
}
}
];
}
Diese teilweise funktioniert, dh wenn Sie die nächste oder vorherige Schaltflächen klicken nacheinander, es wird die mehrere Anfragen zu verhindern, Senden nur der letzte wie gewünscht. Allerdings hat dies auch mehrere Einschränkungen:
- Der
loading
Rückruf in der Konfiguration wird nicht mehr funktionieren. Dies liegt daran, wie die loadingLevel
intern implementiert ist, wird es durch das schnelle Klicken erhöht, aber nicht reduziert, also nie Null erreichen, die den Rückruf auslöst.
- Wenn Sie auf Weiter klicken, warten, bis der Entprellungstimer beendet ist und die Ladeoperation gestartet wird, und beim Laden erneut auf Weiter klicken, führt dies zu unvorhersehbaren Ergebnissen, wobei Ereignisse nicht gerendert werden. Meine Lösung ist jetzt, die Navigationsschaltflächen zu deaktivieren, während Ereignisse geladen werden. Dies behebt das Problem, macht jedoch die Navigation weniger reaktionsfähig.
Ich weiß nicht, warum dies abgelehnt, Sie können Observablen verwenden, um diese Art von Problemen zu lösen. http://stackoverflow.com/questions/33233881/turn-several-ajax-requests-into-observables-with-rxjs –
zumindest wenn jemand abstimmen muss, den Mut zu sagen, warum !! –