Подтвердить что ты не робот

Как я могу получить свой предыдущий маршрут?

Как я могу получить свой предыдущий маршрутизатор в текущем контроллере.

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.
    }
});
4b9b3361

Ответ 1

После проверки объекта маршрутизатора снова я не вижу никакого свойства, которое позволит вам захватить последний маршрут. В до 4 было свойство для последнего маршрута, но с ним было сложно работать.

Мое решение таким же образом, как и в пред 4: я бы создал свой собственный mixin для обработки маршрутов, в которые вы входите, и из этого списка маршрутов вы можете получить любой маршрут, который вы выполните: текущий, последний, и так далее...

jsFiddle здесь: http://jsfiddle.net/sMtNG/

Mixin

Первое, что нужно сделать, это создать mixin, который позволит нам продвигать маршруты в HistoryController. Мы можем сделать это, создав метод setupController, который, конечно, вызывается каждый раз, когда вы переходите в маршрут.

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

Мы продвигаем маршрут в HistoryController.

Контроллер истории

Поскольку мы в настоящее время нажимаем routeName на несуществующий HistoryController, нам нужно будет сделать это, что абсолютно ничего особенного.

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

Контроллер индексов

Так как HistoryController хранит список маршрутов, в которые мы перешли, нам нужно, чтобы он был доступен на других контроллерах, таких как IndexController, поэтому мы будем использовать needs, чтобы указать, в каком контроллере он должны быть доступны.

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

Реализация Mixin

Теперь у нас есть все необходимое для отслеживания маршрутов, и поэтому мы укажем, что нашим маршрутам необходимо реализовать этот mixin.

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

Шаблон

И наконец, теперь, когда у нас есть HistoryController, к которому может обратиться наш IndexController, и mixin нажимает каждый доступный маршрут на HistoryController, мы можем использовать наше представление приложения для вывода списка маршрутов, и укажите последний маршрут. Конечно, в вашем случае вам понадобится последний маршрут минус один, но у меня нет смысла делать все!

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

Я надеюсь, что это приведет вас к прямому и узкому.