Ich möchte einen Fortschrittsbalken anzeigen, während ich die App mit neuen Inhalten aktualisiere. Ich denke, das Beste wäre, es beim Aufruf von .fetch in einer Sammlung zu tun.
Der Inhalt, den ich hole, ist hauptsächlich Bilder (Videoposter usw.), aber ich bekomme nur den Link, nicht einen Base64-String oder etwas Großes. Ich möchte den Bildschirm mit einem Fortschrittsbalken überlagern, während ich die Bildverknüpfungen abrufe, rende die Ansicht so, dass alle Bilder bereit sind, und dann sollte das Overlay verschwinden und die App mit dem bereits geladenen neuen Inhalt anzeigen.
Nun habe ich keine Ahnung, wie ich einen Fortschrittsbalken dafür erstellen könnte, da ich nicht wirklich Bilder direkt, sondern nur den Link bekomme und dann die Ansicht rendere.
Hier sind einige Schritte, die funktionieren könnten.
imagesurls
. (Dies wird ein Array von Strings sein.) imagesleft
. var imageOnLoad = function () {...}
, die diese Variable erfasst
imagesleft
by 1 imagesleft
0 erreicht, rufen Sie den Code / die Methode auf, damit das Popover schließlich verschwindet imagesurls[i]
im Array imagesurls
var img = new Image();
img.onload = imageOnLoad;
Natürlich ignoriere ich Fehlersituationen (Bilder haben eine img.src = imagesurls[i];
-Eigenschaft, die Sie ähnlich zuweisen könnten und der ursprüngliche Ajax könnte fehlschlagen). aber ich denke, der Kern einer Lösung ist da. Das einzige, worüber ich mich wundere, ist, ob Sie tatsächlich einen Verweis auf jedes der Bilderobjekte behalten müssen, während sie erstellt werden. Es könnte eine gute Idee sein, zumindest bis Sie mit dem gesamten Bildset fertig sind. Ansonsten müsste ich mir Sorgen machen, dass die Garbage Collection irgendwie in eine Implementierung eingreift ... aber dann bin ich vielleicht nur paranoid.
Sie könnten jQuery ajaxStart
und ajaxStop
verwenden, um den Fortschritt beim Start anzuzeigen und ihn am Ende auszublenden. Auf diese Weise wird Ihr Indikator jederzeit angezeigt und eine Ajax-Anfrage wird auf Ihrer Seite gestellt.
Eine Route, die Sie nehmen könnten, wenn Sie sie auf diesen bestimmten Abruf beschränken möchten, wäre, die Synchronisierungsmethode in dieser Sammlung oder dem Modell zu überschreiben und die Standardsynchronisierung mit Code einzuschließen, der die Fortschrittsleiste ein- und ausblendet.
Bevor Sie die Sammlung abrufen, legen Sie die Fortschrittsanzeige auf. Wenn die Sammlung abgeschlossen ist und Sie die Bilder an das DOM rendern, fügen Sie Listener zu den Bildladeereignissen . Wenn alle Bilder erfolgreich geladen wurden, entfernen Sie den Fortschrittsbalken.
Sie sollten sicherstellen, dass Sie auch auf Ladefehler warten, wenn ein Bild nicht geladen wird, da der Fortschrittsbalken in diesem Fall niemals entfernt wird.
Wenn Sie fetch aufrufen, stellen Sie Ihre Ladezeile auf.
Übergeben Sie dann eine Funktion als options.success
an die Methode fetch
( Dokumentation ), die sie übernimmt der Bildschirm.
Oder, wenn Sie Ihre Objekte auf dem Bildschirm rendern, können Sie es dann herunterziehen.
Wir verwenden dies für eine unserer Ansichten und ziehen es einfach mit der Methode options.success
Überschreiben Sie die Backbone-Synchronisierungsmethode, anstatt sie an jeder Stelle zu schreiben, fügen Sie sie der Synchronisierungsmethode hinzu. Es funktioniert für neue Seiten, ohne neuen Code zu schreiben.
Tags und Links backbone.js progress-bar