2013-03-14 6 views
5

Próbuję przekierować do pierwszego elementu w kontrolerze ArrayController. Znalazłem kilka innych pytań związanych z tym, ale żaden nie miał odpowiedzi, które wydawały się działać (wiele zmian miało miejsce, więc to jest zrozumiałe).Przekierowanie do pierwszego elementu w ArrayController

Szczególnym odpowiedź od Yehuda here:

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

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

I 'myśleć' Mam odtworzył ten scenariusz, ale muszę zrobić coś złego ...

żadnego wglądu w to, co robię źle jest bardzo doceniane.

Przykład JSBin here.

+0

Mam dokładnie ten sam problem. To też nie działa dla mnie. – Ben

Odpowiedz

1

Problem polega na tym, że lista modeli nie została jeszcze załadowana z serwera. W zależności od twoich potrzeb polecam używanie promis, aby pozwolić na rutynowe czekanie, dopóki twój model nie zostanie załadowany.

App.DoctorsRoute = Ember.Route.extend({ 
    model: function() { 
    return App.Doctor.find().then(function (list) { 
     return list.get('firstObject'); 
    }); 
    }, 

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

oczywiście .. wel, które sprawiają, że abit przekierowanie głupie, więc jeśli chcesz się po prostu czekać na załadowanie listy można spróbować:

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

    redirect: function() { 
    var self = this; 
    this.modelFor('doctors').then(function (list) { 
      return list.get('firstObject'); 
     }).then(function (doctor){ 
      if(!doctor) 
       self.transitionTo('doctor', doctor); 
     }); 
    } 
}); 
+0

Próbowałem wykonać ten przykład, ale lista, którą otrzymuję, ma długość 0, więc pierwszy obiekt jest niezdefiniowany. Wszelkie prace dookoła? Z góry dziękuję! – wen

+0

no cóż, twoja lista jest wtedy pusta. Założę się, że zawsze możesz przekierować na inną trasę. Wstawię poniżej. (tylko idear .. daj mi znać, jeśli to nie działa) – Bram

+0

Jestem prawie pewny, że dostaję wyniki z serwera, ale linia "return list.get ('firstObject') jest nadal wyzwalana zanim lista będzie dostępna. – wen

Powiązane problemy