Mit Backbone.js ist es möglich, dass der Router zu der Seite navigiert, von der er stammt? Ich möchte das für den Fall verwenden, wo ich meine URL ändere, wenn ein Popup erscheint, und ich möchte es zurück ändern, wenn ich das Popup ausgeblendet habe. Ich möchte nicht einfach zurückgehen, weil ich die Hintergrundseite genau in derselben Position behalten möchte, in der ich sie verlassen habe, bevor ich das Popup
gezeigt habe Sie können dieses Problem lösen, indem Sie Backbone.Router
erweitern und alle Routen während der Navigation speichern.
Wenn Sie dann Ihr Modal ablehnen müssen, rufen Sie einfach die Methode MyRouter.previous()
auf, damit Sie zurück zum letzten "Hash" geleitet werden.
Ich denke, dass mateusmasos Antwort meistens richtig ist, aber einige Optimierungen erfordern, um sicherzustellen, dass Sie immer die richtige URL erhalten, die Sie suchen.
Zuerst müssen Sie die route-Methode überschreiben, damit eine beforeRoute-Methode ausgelöst wird:
%Vor%Dann binden Sie das Ereignis und initialisieren die Verlaufsinstanzvariable:
%Vor%Als Nächstes erstellen Sie Hilfsmethoden zum Speichern und Abrufen des Fragments:
%Vor%Schließlich benötigen Sie eine letzte Hilfsmethode, mit der Sie die URL ändern können, ohne das resultierende Fragment neu zu laden und zu speichern. Sie müssen dies verwenden, wenn Sie das Popup-Fenster schließen, oder Sie haben nicht das erwartete Fragment in Ihrem Verlauf, wenn der Benutzer das Popup erneut öffnet, ohne irgendwo anders zu navigieren. Dies liegt daran, dass der Aufruf von navigation ohne "trigger: true" den Ereignishandler nicht zum Speichern des Fragments auslöst.
%Vor% Diese Antwort kann die Frage nicht beantworten, aber es ist fast das gleiche Problem. Ich konnte aufgrund des Schrägstrichs nicht zu einer vorherigen Route oder einer benutzerdefinierten Route navigieren. Damit Routenfunktionen NICHT ausgelöst werden, verwenden Sie {trigger:false}
, oder verwenden Sie gar keinen Trigger, da false
das Standardverhalten ist, und stellen Sie sicher, dass Ihre Route mit #something
anstelle von '# / etwas' beginnt ( beachten Sie den Schrägstrich), oder ändern Sie die RegEx in Backbone.js, der Router Teil.
Tags und Links javascript backbone.js url pushstate