2013-03-14 4 views
5

Je tente de rediriger vers le premier élément dans un ArrayController. J'ai trouvé quelques autres questions liées à cela, mais aucune n'avait de réponses qui semblaient fonctionner (beaucoup de changements ont eu lieu, c'est compréhensible).Redirection vers le premier élément dans ArrayController

Une réponse particulière de 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); 
    } 
}); 

Je pense que j'ai recréé ce scénario, mais je dois avoir fait quelque chose de mal ...

Toute idée de ce que je fais mal est grandement apprécié. Par exemple JSBin here.

+0

J'ai exactement le même problème. Cela ne semble pas fonctionner pour moi non plus. – Ben

Répondre

1

Le problème ici est que votre liste de modèles n'est pas encore chargée à partir du serveur. En fonction de vos besoins, je recommanderais d'utiliser un promis pour laisser la routine attendre que votre modèle soit chargé.

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 qui rendrait la redirection ABIT stupide, donc si vous voulez juste attendre la liste pour vous charger pouvez essayer:

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

J'ai essayé de suivre cet exemple, mais la liste que j'obtiens a une longueur de 0 donc le premier objet n'est pas défini. Tout travail autour? Merci d'avance! – wen

+0

Eh bien, je pense que votre liste est vide alors. Je suppose que vous pourriez toujours rediriger vers une autre route .. Je vais mettre en dessous. (juste un idear .. laissez-moi savoir si cela ne fonctionne pas) – Bram

+0

Je suis assez sûr que j'obtiens des résultats du serveur, mais la ligne "return list.get ('firstObject') est toujours déclenchée avant que la liste soit disponible. – wen

Questions connexes