2013-02-21 68 views
17

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

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

http:// stackoverflow的可能重复。com/questions/14831668/the-route-i-came-from-or-previous-route – 2013-02-23 07:01:20

+0

我也在处理这个问题。如果出现类似这样的情况,那么在后面的MVC版本中会很好:请求'RarUrl.PreviousRoute – JoshYates1980 2014-09-17 16:20:12

+1

只需执行'history.back()'。这就是Ember如何设计的。没有必要建立一大堆机器来维护自己的历史。浏览器已经保持自己的。 – 2015-06-01 17:30:44

回答

22

在再次检查路由器对象后,我没有看到任何可以让您抓取最后路由的属性。前4年有最后一条路线的财产,但这是一个难以处理的财产。

因此,我的解决方案与前4中的解决方案相同:我将创建自己的mixin以处理您导航的路线,并从该路线列表中获取您所处的任何路线:目前的一个,最后一个,等等...

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

密新

做的第一件事是创建混入,使我们的路线推入一个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']  
}); 

实现密新

我们现在有我们需要保持路线的轨道的一切,所以我们指定我们的路线需要实现这个混入。

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

模板

最后但并非最不重要的,现在我们有一个HistoryController,我们的IndexController可以访问,并混入推动各访问路径进入HistoryController,我们可以用我们的应用程序,以便输出路线列表,并指定最后的路线。当然在你的情况下,你需要最后的路线减去一个,但是在我做任何事情时都没有意义!

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

我希望这可以让你走上直线和狭窄。

+0

这适用于非动态路线。这种方法适用于具有动态细分的路线吗? – Hoetmaaiers 2014-12-12 10:05:20

+0

你不需要在你的'setupController'中调用'_super'吗? – 2015-06-05 05:34:47

+7

似乎太复杂了 – 2015-06-30 12:43:56