2013-02-21 46 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

相關問題