2013-02-21 9 views
17

Wie kann ich meinen vorherigen Router in meinem aktuellen Controller bekommen.Wie kann ich meine vorherige Route bekommen?

+0

möglich duplikat von http: // stackoverflow.com/questions/14831668/the-route-i-kam-from-or-previous-route –

+0

Ich arbeite auch an diesem Problem. Es wäre nett in einer späteren MVC-Version, wenn es etwas wie: Request.RawUrl.PreviousRoute – JoshYates1980

+1

Tun Sie einfach 'history.back()'. So ist Ember so konzipiert, dass es funktioniert. Es ist nicht nötig, eine ganze Reihe von Maschinen zu bauen, um Ihre eigene Geschichte zu bewahren. Der Browser behält bereits seine eigenen. –

Antwort

22

Nachdem ich das Router-Objekt erneut inspiziert habe, sehe ich dort keine Eigenschaft, mit der Sie die letzte Route abrufen können. In Pre 4 gab es eine Eigenschaft für die letzte Route, aber es war eine schwierige Eigenschaft, mit zu arbeiten.

Meine Lösung ist daher die gleiche wie in Pre 4: Ich würde meinen eigenen Mixin erstellen, um die Routen zu bearbeiten, auf denen Sie navigieren, und von dieser Liste der Routen können Sie die gewünschte Route abrufen: die aktuelle, die letzte, et cetera ...

jsFiddle hier: http://jsfiddle.net/sMtNG/

Mixin

das erste, was zu tun ist, um die mixin zu schaffen, die uns die Wege schieben können in a HistoryController. Wir können dies tun, indem wir eine setupController Methode erstellen, die natürlich jedes Mal aufgerufen wird, wenn Sie auf eine Route gehen.

App.HistoryMixin = Ember.Mixin.create({ 
    setupController: function() { 
     this.controllerFor('history').pushObject(this.get('routeName')); 
    } 
}); 

Wir schieben die Route in die HistoryController.

History-Controller

Da wir zur Zeit sind die routeName in einem nicht vorhandenen HistoryController drängen, müssen wir, dass Sie vor und erstellen gehen, was besondere absolut nichts.

App.HistoryController = Ember.ArrayController.extend(); 

Index-Controller

Da die HistoryController speichert die Liste von Routen wir in navigiert haben, werden wir es auf anderen Controllern zugänglich benötigen, wie zum Beispiel die IndexController, werden wir daher needs verwenden um festzulegen, in welchem ​​Controller es erreichbar sein soll.

App.ApplicationController = Ember.Controller.extend({ 
    needs: ['history']  
}); 

Implement Mixin

Wir haben jetzt alles, was wir einen Überblick über die Routen zu halten brauchen, und wir werden so festzulegen, dass unsere Routen dieses mixin implementieren müssen.

App.CatRoute = Ember.Route.extend(App.HistoryMixin); 

Vorlage

Last but not least, jetzt, wo wir eine HistoryController haben, die unsere IndexController zugreifen können, und die mixin drückt jede zugegriffen Weg in die HistoryController, können wir unsere Anwendung im Hinblick auf Ausgabe verwenden eine Liste der Routen und die letzte Route angeben. In deinem Fall brauchst du natürlich die letzte Route minus eins, aber es macht keinen Sinn, alles zu machen!

<h1>Routes History ({{controllers.history.length}})</h1> 
<ul> 
    <li>Last Route: {{controllers.history.lastObject}}</li> 
    {{#each controllers.history}} 
     <li>{{this}}</li> 
    {{/each}} 
</ul> 

Ich hoffe, dass Sie auf die gerade und enge bekommt.

+0

Dies funktioniert für nicht dynamische Routen. Würde dieser Ansatz für Routen mit dynamischen Segmenten funktionieren? – Hoetmaaiers

+0

Müssen Sie '_super' nicht von Ihrem' setupController' im Mixin aufrufen? –

+7

Scheint viel zu kompliziert –

Verwandte Themen