2013-02-21 18 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-from-or-previous-route –

+0

私もこの問題を解決しています。それは、次のようなものがあれば、後のMVCバージョンでいいでしょう:Request.RawUrl.PreviousRoute – JoshYates1980

+1

'history.back()'を実行してください。それがEmberが動作するように設計された方法です。あなた自身の歴史を維持するための機械をたくさん作る必要はありません。ブラウザはすでに独自のものを保持しています。 –

答えて

22

ルータオブジェクトを再度検査した後、最後のルートを取得できるプロパティは表示されません。プレ4では、最後のルートのためのプロパティがあったが、それは操作するのは難しいプロパティでした。

私の解決策は前の4と同じです:あなたがナビゲートしたルートを処理するために私自身のミックスインを作成し、そのルートリストから、あなたが行っているルートを得ることができます:現在の、最後の1、エトセトラ...ここ

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

MIXIN

まず最初に行うには、私たちはにルートをプッシュすることができますミックスインを作成することですa HistoryControllersetupControllerメソッドを作成すると、ルートに移動するたびに呼び出されます。

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

HistoryControllerに経路をプッシュしています。

歴史コントローラー

我々は現在、存在しないHistoryControllerrouteNameをプッシュしているので、私たちは絶対に特別なものではありませんこれは、先に行くと、それを作成する必要があります。

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

インデックスコントローラは

HistoryController店ので、我々はにナビゲートしてきたルートのリストには、我々はそのようなIndexControllerなどの他のコントローラー、上でアクセス可能なことをする必要があります、私たちはそのためneedsを使用しますアクセス可能にするコントローラを指定します。

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

は、我々は今、我々はルートを追跡するために必要なすべてを持っているのmixin

を実装し、私たちは私たちのルートは、このミックスインを実装する必要があることを指定します。

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

今我々はIndexControllerがアクセスすることができ、そしてミックスインはHistoryControllerにそれぞれアクセスルートをプッシュし、我々は出力に我々のアプリケーションのビューを使用することができますHistoryControllerを持っていることを少なくとも

最後にではなく、テンプレート、ルートのリスト、および最後のルートを指定します。もちろんあなたの場合、最後のルートから1を引いたものが必要ですが、私はすべてをやっている意味がありません!

<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

+0

mixinの 'setupController'から' _super'を呼び出す必要はありませんか? –

+7

あまりにも複雑です –

関連する問題