How can I get My previous route?

ember-router, ember.js

Solution

After having inspected the router object again, I don't see any property in there that will allow you to grab the last route. In pre 4 there was a property for the last route, but it was a difficult property to work with.

My solution is therefore the same as it was in pre 4: I'd create my own mixin to handle the routes that you navigate into, and from that list of routes, you can get whatever route you're after: the current one, the last one, et cetera...

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

Mixin

The first thing to do is create the mixin that will allow us to push the routes into a `HistoryController`. We can do this by creating a `setupController` method which of course gets invoked every time you move into a route.

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

We are pushing the route into the `HistoryController`.

History Controller

Since we're currently pushing the `routeName` into a non-existent `HistoryController`, we'll need to go ahead and create that, which is absolutely nothing special.

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

Index Controller

Since the `HistoryController` stores the list of routes we've navigated into, we'll need it accessible on other controllers, such as the `IndexController`, we'll therefore use `needs` to specify in which controller it should be accessible.

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

Implement Mixin

We now have everything we need to keep a track of the routes, and so we'll specify that our routes need to implement this mixin.

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

Template

Last but not least, now that we have a `HistoryController` which our `IndexController` can access, and the mixin pushes each accessed route into the `HistoryController`, we can use our application view to output a list of the routes, and specify the last route. Of course in your case you'll need the last route minus one, but there's no sense in me doing everything!

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

I hope this gets you onto the straight and narrow.

Problem

How can I get my previous router in my current controller. ``` App.MyController = Em.ObjectController.extend({ next:function() { // This is my action helper in HBS this.transitionTo('nextPage'); }, back:function() { // This is my action helper in HBS // Here I need to dynamically identify my previous route. // How can I get my previous route. } }); ```

Original source

Related problems