Backbone.js: Wie wird von einer Ansicht zur anderen umgeleitet?
In Backbone.js, was ist das äquivalent von HttpResponseRedirect in Django?
In einem Backbone.Ansicht, die ich brauche zum senden von Daten an den server, und klicken Sie dann leiten Sie den Benutzer zu einer anderen Ansicht. Wie funktioniert das? Sollte ich event-oder router?
Dank!
Kommentar zu dem Problem
eine andere Ansicht? Oder eine andere Seite?
InformationsquelleAutor der Frage yichen | 2011-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist wichtig zu verstehen, dass Rückgrat ist nicht einer stateless web server, so eine "Umleitung" klingt wie das, was Sie wollen, aber es wahrscheinlich nicht. Wenn Sie keine Erfahrung in der Gebäude-stateful desktop-Anwendungen zeichnen Sie aus dieser Erfahrung und wie Sie bewegen sich von einem Bildschirm zum anderen. Wenn Sie keine desktop-client-Erfahrung, empfehle ich Ihnen sich einige, dass Sie unter Ihrem Gürtel, da ein Backbone-app ist eine stateful-app, es passiert einfach in einem browser laufen.
Vorausgesetzt, Sie haben einige stateful-app wissen, Sie haben ein paar Optionen für die Herstellung dieser Arbeit.
Router.navigieren: die "redirect" - äquivalent (nicht-fan)
Nach Ihrem Anruf auf den server zurück kommen, können Sie rufen Sie Ihren router
navigate
Methode:myRouter.navigate("/myRoute", true)
. Gebt dentrue
argument als zweiten parameter. Oder, wie JasonOffutt empfehlen, einfach aktualisieren Sie manuell die url-hash-fragment, und es ist effektiv dasselbe.Ich bin nicht begeistert von diese, aber manche Leute sind.
Prozeduralen workflow
Können Sie erstellen, die ein sehr einfaches Objekt, das weiß, wie man die richtigen anzeigen auf dem Bildschirm, wenn Sie eine Methode aufrufen. Zum Beispiel, wenn Sie brauchen, um eine Ansicht mit der Bezeichnung "WidgetView" erstellen Sie ein Objekt mit einer Methode namens
showWidgetView
. Stellen Sie das Objekt mit dieser Methode überall in Ihrem code, indem Sie es zu einem Namensraum, der übergabe an Ihr ausführen von code, oder eine andere Technik. Wenn Ihr Anruf an den server zurückgibt, rufen Sie das ObjektshowWidgetView
Methode und lassen Sie es zeigen, der nächsten Ansicht für Sie.Dies ist funktional, aber es wird chaotisch, schnell in etwas anderes als sehr kleine apps. Ich Tue dies in kleinen apps, aber. Wenn Sie zu larget-apps, die Sie ungefähr denken müssen evented workflow-und event-driven Architekturen.
Ereignisse und workflow
Nachdem Ihr server-Aufruf zurückgegeben wird, das Feuer aus einer Veranstaltung mit so etwas wie ein event aggregator, zuzulassen, dass andere Teile Ihres Systems wissen, dass etwas wichtiges gerade passiert ist. Diese anderen Teile des Systems können dann herausfinden, was zu tun ist, in Reaktion, einschließlich der Aufruf-code und ersetzt die aktuelle Ansicht mit einem neuen, updates der url-route, etc.
Wenn Sie unten gehen den Weg der mithilfe von events, schließlich werden Sie ausführen, in einem cluster von Codes, die nicht scheinen, um überall zu passen, schön. Dies ist in der Regel Ihre event-Handler, und ist in der Regel ein Zeichen für ein Objekt /Anliegen, dass will gekapselt werden. Höhere Ebene der workflow-Objekte im Backbone ist eine gute Idee, wenn Sie über einen event-driven architecture.
Diese workflow-Objekte sind in der Regel verantwortlich für den Anstoß eines Workflows immer alle die rechts-Ansichten und-Modelle in Platz, und dann enthalten die event-Handler für Ihre Ansichten und /oder event aggregator. Die event-handler-Methoden wird, überprüfen Sie den Status der app entweder durch den args übergeben durch die Methode oder durch die Suche in einem anderen Zustand befindet, und herauszufinden, was als Nächstes gemacht werden muss. Dann wird die app zu ändern, um was auch immer es braucht, um Aussehen, basierend auf den neuen Staat.
Außerdem ein workflow-Objekt ist kein Rückgrat zu konstruieren. Es ist etwas, das Sie selbst bauen, nur mit plain old JavaScript.
...
Hoffe, das hilft.
InformationsquelleAutor der Antwort Derick Bailey
Hier ist der Ansatz, den ich dabei gewesen:
Vorausgesetzt, Sie haben einen router definiert mit Routen wie diese:
Ich in der Regel nur tags verwenden, und legen Sie das Attribut href, um die hash-ich will weitergeleitet werden:
Alternativ, wenn Sie wollen "weiterleiten" in Ihrem JavaScript-Sie können die location-hash ausdrücklich:
Bin ich mir nicht 100% sicher, dass dieser 'best practice', aber ich habe es getan in einer Reihe von guten tutorials.
//Edit
So, nach re-Lektüre Ihrer ursprünglichen Frage, könnte man "redirect" - nach dem sync wieder Anrufe von der server einfach durch festlegen der location-hash.
InformationsquelleAutor der Antwort JasonOffutt