2 votes

Trouver un élément dans Ember ArrayController

Quelle est la bonne façon de trouver un élément dans Ember.js ? ArrayController ? J'ai un jeu de contacts dans le contrôleur :

App.contactsController = Em.ArrayController.create({
    content:[],
});

Il y a des objets dans le contrôleur, ils sont affichés et tout fonctionne bien. Ensuite, je veux implémenter un routeur avec sérialisation/désérialisation :

...
deserialize:function (router, params) {
    var contact = App.contactsController.find(function(item) {
        return item.id == params.contact_id;
    });
},
...

Cependant, la fonction find ne semble pas effectuer d'itération. Quelle pourrait en être la raison ? Est-il possible que le routeur tente d'effectuer le routage avant que l'application n'appelle sa fonction de recherche ? ready méthode ? C'est là que je remplis le contrôleur avec des données.

EDIT : Eh bien, j'ai constaté que le routeur essaie d'effectuer la transition avant que je remplisse mon arrayController avec les données (en Ember.Application.ready méthode). Est-il possible de "retarder" le routage après que les données aient été correctement définies ?

0voto

Daniel King Points 9
var contact = App.contactsController.filter(function(item) {
    return item.id == params.contact_id;
});

Je pense que vous pouvez exécuter Application.initialize() lorsque le routeur a été défini. Vous pouvez utiliser l'observateur pour détecter le jeu de données.

dataChanged: function() {
    console.log(this.get('content.length'));
    // before emberjs 1.0pre
    // console.log(this.getPath('content.length')); 
}.observes('content')

0voto

Pavel S. Points 1637

Le problème était en fait causé par l'insertion de données dans arrayController après que le routeur ait effectué sa désérialisation. Le fait de le placer avant App.initialize() a résolu le problème.

0voto

WallMobile Points 1092

La bonne réponse est :

var contact = App.contactsController.content.find(function(item) {
    return item.id == params.contact_id;
});

Il ne retournera pas d'élément si vous ne pointez pas vers le tableau de contenu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X