私はeventSources
を使ってデバウンスを取得し、各イベントソースごとに1つの関数の配列を返すことができました。 getSources
機能は便宜上のものです。 fullCalendar構成では、我々は持っているでしょう:
...
eventSources: getSources(),
...
と機能コード:
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();
}
}
];
}
これは部分的に動作し、あなたが連続して次または前のボタンをクリックした場合、すなわち、それは、送信、複数の要求を防ぐことができます必要に応じて最後のものだけを削除します。ただし、これには複数の警告があります。
loading
コールバックの設定が無効になります。これは、loadingLevel
が内部でどのように実装されているかによって、速いクリックでは増加しますが、減少しないためゼロにはならず、コールバックをトリガーします。
- 次へをクリックすると、デバウンスタイマーが終了し、ロードが開始されるのを待ってから、ロード中にもう一度クリックすると、イベントがレンダリングされずに予期しない結果になります。私の解決策は、イベントがロードされている間にナビゲーションボタンを無効にすることです。これにより問題は解決されますが、ナビゲーションのレスポンスは低下します。
私はこの投票がなぜ失敗したのかわかりませんが、この種の問題を解決するためにオブザーバブルを使用できます。 http://stackoverflow.com/questions/33233881/turn-several-ajax-requests-into-observables-with-rxjs –
少なくとも誰かが投票する必要がある場合は、理由を言うために勇気を持ってください! –