2013-02-21 10 views
17

Önceki yönlendiricimi geçerli denetleyicime nasıl alabilirim. Yine yönlendirici nesne teftiş ettikten sonraÖnceki rotamı nasıl alabilirim?

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

.com/questions/14831668/yol-i-gelen-veya-önceki-rota –

+0

Ayrıca bu sorunu da çalışıyorum. Eğer bir şey varsa daha sonraki bir MVC sürümünde güzel olurdu: Request.RawUrl.PreviousRoute – JoshYates1980

+1

Sadece 'history.back()' yapın. Ember böyle çalışmak için tasarlandı. Kendi tarihinizi korumak için bir sürü makine kurmaya gerek yok. Tarayıcı zaten kendine aittir. –

cevap

22

, dün rotayı kapmak sağlayacak orada herhangi özelliğini görmüyorum. Önceden 4'te son rota için bir özellik vardı, ama çalışmak için zor bir özellikti. öncesi 4'te olduğu gibi

Çözümümün nedenle aynıdır: Sana içine gezinmek yolları işlemek için kendi mixin oluşturmak istiyorum ve yolların bu listeden, sen peşinde olduğunuz yolu ne olursa olsun elde edebilirsiniz: geçerli bir, sonuncusu, vesaire ... burada

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

mixin

yapmanız gereken ilk şey bizi içine yolları itmek sağlayacak mixin oluşturmaktır HistoryController. Bunu, bir rotayı her hareket ettirdiğinizde, elbette çağrılan bir setupController yöntemi oluşturarak yapabiliriz.

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

Rotayı HistoryController'a zorluyoruz.

Tarih Kontrolör

şu anda var olmayan bir HistoryController içine routeName itiyorsun yana, devam edin ve özel bir şey kesinlikle olan bu oluşturmanız gerekir.

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

Endeksi Kontrolör

HistoryController mağaza beri gittikten ettik yollarının listesi, bu tür IndexController gibi diğer kontrolörler, erişilebilir buna ihtiyacınız olur, bu nedenle needs kullanacağız hangi denetleyicide erişilebilir olması gerektiğini belirtmek için.

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

Şimdi biz yolların bir takip için gereken her şeyi mixin

Uygulamak ve bu yüzden bizim yolları bu mixin uygulamak gerektiğini belirtmek gerekir.

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

Şablon biz HistoryController var ki, şimdi az değil

Son olarak hangi bizim IndexController erişebilir ve mixin HistoryController içine her erişilen rotayı iter, biz çıkışa bizim uygulama görünümünü kullanabilirsiniz rotaların bir listesini yapın ve son rotayı belirtin. Tabii ki sizin durumunuzda, son rotayı eksi birine ihtiyacınız olacak, fakat her şeyi yapmamda bir anlamı yok!

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

Umarım bu sizi düz ve dar olana götürür. Http: // stackoverflow öğesinin olası kopyası

+0

Bu, dinamik olmayan yollar için çalışır. Bu yaklaşım dinamik segmentlere sahip rotalar için çalışır mı? – Hoetmaaiers

+0

Mixin içinde 'setupController'' ndan '_super' 'i çağırmanız gerekmiyor mu? –

+7

Yol çok karmaşık görünüyor –