我怎样才能获得我以前的路线?

时间:2013-02-21 10:58:36

标签: ember.js ember-router

如何在我当前的控制器中获取以前的路由器。

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

2 个答案:

答案 0 :(得分:21)

再次检查路由器对象后,我没有看到任何属性允许你抓住最后一条路线。在前4路中,有一个属性用于最后一条路线,但这是一个很难处理的属性。

因此我的解决方案与之前的解决方案相同:我创建自己的mixin来处理您导航的路线,并从该路线列表中,您可以获得您想要的任何路线:当前的,最后一个,等等......

jsFiddle这里:http://jsfiddle.net/sMtNG/

<强>密新

首先要做的是创建一个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

我们现在拥有了跟踪路线所需的一切,因此我们将指定我们的路线需要实施此路线。

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>

我希望这会让你直截了当。

答案 1 :(得分:0)

目前的解决方案感觉就像尾巴摇着狗一样。

简单的解决方案是keyboard :: IORef GLfloat -> IORef GLfloat -> IORef GLfloat -- rotations -> IORef Double -> IORef Double -- parameters a and b -> IORef Double -- isolevel -> IORef Double -- zoom -> KeyboardCallback keyboard rot1 rot2 rot3 a b l zoom c _ = do case c of 'e' -> rot1 $~! subtract 2 'r' -> rot1 $~! (+ 2) ....... 'q' -> leaveMainLoop _ -> return () postRedisplay Nothing

Ember没有跟踪路由器的历史记录,因为它会是多余的。默认情况下,所有浏览器都已处理