In meiner Backbone.js basierten App spreche ich mit meiner API, die mit einer 401 antwortet, falls die zugrundeliegende Anfrage ohne oder mit einem ungültigen Authentifizierungs-Token gemacht wurde. Ich möchte dies gerne instrumentieren, indem ich bei jedem Empfang eines 401 zu einer #login Seite navigiere.
Um die 401 zu holen, habe ich Backbone.sync erfolgreich verpackt, aber an diesem Punkt bleibe ich irgendwie stecken. Ich habe hier verschiedene Strategien ausprobiert:
throw 'unauthorized'
in Backbone :: synchronisieren und versuchen, in meinem Router zu holen. Fehlgeschlagen mit: 'Uncaught unauthorized'
Ich versuche, #.navigate '#login'
down in Backbone :: sync zu finden, was nicht nur seltsam aussieht, sondern auch das Problem, dass meine App auf AMD / require.js basiert und ich nicht einfach auf meine Backbone.Router-Instanz zugreifen kann in meiner eingepackten Funktion sync
.
Die einzige Lösung, die ich bisher gesehen habe, wäre, ein "global verfügbares" Caching-Objekt zu erstellen, das einen Verweis auf meine Router-Instanz erhält und wiederum in define
als Abhängigkeit verwendet wird, wo es benötigt wird. Dieses Cache-Objekt musste ein Singleton sein und brach meine ganze "Bitte-Nein-Globals-und-Namespaces" -Strategie.
Ich bin hier irgendwie festgefahren. Kann mir jemand auf eine sauberere Lösung dieses häufigen Problems hinweisen?
Sie können die Umleitung in ajaxError tun:
%Vor%Wenn alles richtig eingerichtet ist, müssen Sie nicht manuell auf die Router-Instanz zugreifen. Wenn Sie diese URL aufrufen, sollte die damit verknüpfte Routenfunktion ausgelöst werden.
Für diejenigen, die jQuery 1.8 oder höher verwenden, hat sich die Syntax geändert:
%Vor%Weitere Informationen finden Sie im jQuery-Handbuch .
Tags und Links javascript requirejs backbone.js amd