ich eine Hauptansicht, die einen Kasten hat, die Subviews hat, die Sie zwischenBackbone - verhindert verzögerte Ausführung nach Ansicht entfernt wird
Nach einem Abruf Ajax-Aufruf erfolgreich ist, ein ‚Erfolg‘ div auf der Hauptansicht wechseln wird gezeigt.
Das Problem, mit dem ich konfrontiert bin, ist, dass, wenn ich zwischen Subviews wechsle, die verzögerte Zusage aus dem Abruf der vorherigen Ansicht ausgeführt wird und das 'Erfolg' div.
dies ist mein Code:
this.model.fetch().done(function() {
$('#success').show();
});
onChangeSubview: function() {
this.subview.unbind();
this.subview.remove();
}
Diese Frage SO abort-ajax-requests-using-jquery sagt, dass Sie den Zeiger speichern, um die es verschoben und stoppen, indem wie so abbrechen() aufgerufen:
var fetchXhr = this.model.fetch().done(function() {
$('#success').show();
});
onChangeSubview: function() {
fetchXhr.abort();
}
Ich habe mehr Fetches für jede Teilansicht und einige werden in einem Intervall wiederholt, das würde bedeuten, dass ich jede Abrufanforderung speichern und durch sie durchlaufen müsste, die jeweils abbrechen.
Gibt es eine bessere Möglichkeit, die Ausführung der zurückgestellten Funktion zu stoppen? zB: eine Art von Prüfung, um zu sehen, ob die Unteransicht entfernt wurde, oder eine Funktion, um alle verzögerten Versprechungen zu lösen?
Nur laut gedacht, könnten Sie alle Ihre Abrufe für eine Unteransicht zu einer Liste hinzufügen und dann onChangeSubview können Sie über sie iterieren und den Abbruch z. 'this.fetches.forEach (function (fetchXhr) {fetchXhr.abort();});' (oder '_.invoke (this.fetches, 'abort');' wenn Du es auf Underscore-Art machen willst). Sie könnten diese Funktionalität möglicherweise sogar in eine Basisansicht einfügen, die Sie erweitern, sodass Sie etwas davon abstrahieren können. – Dymos
@Dymos +1. Du bist zu bescheiden, das ist kein Kommentar, sondern eine wirkliche Antwort;) – hashchange
haha danke :-) Ich werde es dann als Antwort für die Nachwelt hinzufügen. – Dymos