2013-01-13 19 views
17

Chciałbym ścieżkę Ember /clinic/1, aby automatycznie przekierować, aby pokazać pierwszego lekarza: /clinic/1/doctor/1.Ember - Automatycznie przekieruj do firstObject

Każda klinika ma wielu lekarzy.

Niestety, jeśli mogę użyć tego kodu:

var doctor = clinicController.get('content.doctors.firstObject'); 
router.transitionTo('clinic.doctor.index', doctor); 

... to nie działa, jak content.doctors.length wciąż 0 gdy ten kod działa w app_router.js.

Wszelkie pomysły?

+0

Jaka wersja węgielek używacie? Myślę, że ten kod jest przed nowym routingiem. W każdym razie, może zrobić jsfiddle lub jsbin pokazując przykład? –

Odpowiedz

24

powinien być w stanie to zrobić:

App.DoctorsRoute = Ember.Route.extend({ 
    model: function() { 
    return App.Doctor.find(); 
    }, 

    redirect: function() { 
    var doctor = this.modelFor('doctors').get('firstObject'); 
    this.transitionToRoute('doctor', doctor); 
    } 
}); 

To będzie działać, ponieważ:

  • Jeżeli hak modelu zwraca obiekt, który nie został jeszcze załadowany, resztę haków wygrane Uruchomić, dopóki model nie zostanie całkowicie załadowany.
  • Jeśli hak redirect przejdzie na inną trasę, pozostałe haki nie będą działać.

Uwaga że od 2426cb9 można pozostawić poza niejawny .index podczas przechodzenia.

+2

Bez żartów - sam człowiek! Dzięki Yehuda :) –

+0

Czy to nadal działa z ember 1.0.0rc2? Zawsze otrzymuję 'this.modelFor ('doctors'). Get ('length')' na 0. –

+1

Próbuję tego podejścia, ale nie wydaje się działać na początkowym obciążeniu. Sądzę, że dzieje się tak, ponieważ dane nie zostały jeszcze załadowane. Jeśli jednak odejdę i wrócę, to zadziała, ponieważ w tym czasie załadowano dane. jakakolwiek rada @Yahuda? – Ben

2

Przekierowanie na Szlaku nie działa na mnie w moich Ember-danych aplikację opartą jako dane nie są ładowane w momencie przekierowania, ale to działa na mnie ...

w rolach kontroler Przechodzę do trasy roli dla pierwszego załadowanego obiektu.

Application.RolesController = Ember.ArrayController.extend({ 

    selectFirstObject: function() { 
     if (this.get('content').get('isLoaded')) { 
      var role = this.get('firstObject'); 
      this.transitionToRoute('role', role); 
     } 
    }.observes('content.isLoaded') 

}); 

HTH Gerry

1

jako aktualizację, jeśli nie chcesz, aby przekierować bo masz zagnieżdżonych trasy, będziemy chcieli użyć przekierowania warunkowe oparciu o zamierzonej trasy.

redirect ma dwa argumenty przekazane do niego, model i obiekt przejścia. Przejście ma właściwość targetName, w której można warunkowo przekierować na podstawie jego wartości.

redirect: function(model, transition){ 
    if(transition.targetName ==='doctors.index'){ 
    this.transitionTo('doctor', model.get('firstObject')); 
    } 
} 
1

Dla użytkowników EmberCLI, można osiągnąć to samo, wykonując następujące czynności:

//app/routes/clinics/show.js 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    redirect: function(model) { 
    var firstDoctor = model.get('doctors.firstObject'); 
    this.transitionTo('doctor', firstDoctor); 
    } 
}); 
Powiązane problemy