2013-03-14 10 views
5

Ich versuche, auf das erste Element in einem ArrayController umleiten. Ich habe ein paar andere Fragen dazu gefunden, aber keine hatte Antworten, die zu funktionieren schienen (es gab viele Änderungen, so dass dies verständlich ist).Umleiten auf das erste Element in ArrayController

Eine besondere Antwort von 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); 
    } 
}); 

Ich denke, 'Ich habe dieses Szenario neu erstellt, aber ich muss etwas falsch gemacht haben ...

Einsicht in das, was ich tue, falsch wird sehr geschätzt.

Beispiel JSBin here.

+0

ich genau das gleiche Problem haben. Es scheint auch nicht für mich zu funktionieren. – Ben

Antwort

1

Das Problem hier ist, dass Ihre Liste der Modelle noch nicht vom Server geladen wurde. Abhängig von Ihren Bedürfnissen würde ich empfehlen, einen Promis zu verwenden, um den Router warten zu lassen, bis Ihr Modell geladen ist.

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); 
    } 
}); 

ofcourse .. wel das würde die Umleitung abit dumm machen, wenn Sie also nur für die Liste warten möchten Sie könnten versuchen, zu laden:

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

Ich habe versucht, diesem Beispiel zu folgen, aber die Liste, die ich bekomme, hat die Länge 0, also ist das ersteObjekt undefiniert. Irgendwelche Arbeiten herum? Danke im Voraus! – wen

+0

Nun ich gues Ihre Liste ist dann leer. Ich behaupte, du könntest immer auf eine andere Route umleiten. Ich lege mich unten hin. (nur ein idear .. lass es mich wissen, wenn es nicht funktioniert) – Bram

+0

Ich bin mir ziemlich sicher, dass ich Ergebnisse vom Server bekomme, aber die "return list.get ('firstObject') Zeile wird immer noch ausgelöst, bevor die Liste verfügbar ist. – wen

Verwandte Themen