2 votes

Select dans ember ne charge pas les données - existe-t-il un exemple fonctionnel ?

Je suis nouveau à Ember JS et j'essaie de comprendre comment créer Ember.Select qui permettrait de créer un nouveau travail pour l'utilisateur.

Voici une partie du code de mon form.handlebars :

{{view Ember.Select viewName="job-user"
            contentBinding="users"
            optionLabelPath="content.name"
            optionValuePath="content.id"

            }}

Je suis dans le JobsNewController :

JP.JobsNewController = Ember.ObjectController.extend({
    needs: ['users'],
    users: [],
    usersBinding: "controllers.users"

});

Voici à quoi ressemble mon UsersController :

JP.UsersController =  Ember.ArrayController.extend();

Cela fonctionne lorsque j'accède à l'écran newJob à partir de l'écran où le UserController est renseigné, mais lorsque j'accède directement à jobs/new, la sélection n'est pas alimentée en données. Comment puis-je forcer Ember à charger les données pour cette sélection ?


EDIT : J'ai dû configurer les routes correctement :

JP.JobsNewRoute = Ember.Route.extend( JP.JobsFormable, {
    model: function() {
        return JP.Job.createRecord();
    },
    setupController:function(controller,model) {
        this._super(controller,model);
        controller.set('usersForSelect', JP.User.find());
    }
});

Et j'ai également modifié la forme :

{{view Ember.Select viewName="job-user"
   contentBinding="usersForSelect"
   optionLabelPath="content.name"
   optionValuePath="content.id"
}}

Merci @mavilein pour l'astuce

2voto

Teddy Zeenny Points 3971

Lorsque vous accédez au JobsNewRoute de l'URL, le UsersController n'est pas alimenté. Ainsi, la liaison users en JobsNewController a UsersController serait inutile puisque UsersController est vide et n'a pas été rempli.

Vous pouvez résoudre ce problème de deux manières, les deux se trouvent dans la rubrique JobsNewRoute .

Dans un premier temps, mettez à jour votre JobsNewRoute pour remplir le UsersController :

JP.JobsNewRoute = Ember.Route.extend({
  setupController: function(controller, model) {
    this.controllerFor('users').set('content', JP.User.find());
  }
});

Une autre solution consisterait à supprimer la liaison entre JobsNewController.users y UsersController et remplissez simplement JobsNewController.users en el JobsNewRoute :

JP.JobsNewController = Ember.ObjectController.extend({
  users: []
});

JP.JobsNewRoute = Ember.Route.extend({
  setupController: function(controller, model) {
    controller.set('users', JP.User.find());
  }
});

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