web-dev-qa-db-fra.com

Ember - Comment intégrer le modèle de route dans l'action de la route

Est-il possible d'accéder au modèle de route dans l'action de route?

Je passe plusieurs objets dans un modèle de route à un modèle,

 model: function() {
    return {
        employeeList : this.store.findAll("employee"),
        employee : Ember.Object.create()
    }
}

À partir de l’action route, je souhaite modifier le modèle d’itinéraire. J'ai essayé ce qui suit, mais je ne reçois pas l'objet.

actions:{
    editAction : function(id) {
        var emp = this.get("model");
        console.log(emp.employee);

    }
}

Quelqu'un peut-il donner une solution pour obtenir et modifier un objet modèle (employé)?

13
Manu Benjamin

Le premier problème est que vous devez retourner une promesse du crochet modèle. De cette façon, la transition attendra la promesse de résolution. return { /*...*/}; renvoie un objet et non une promesse, même si l'objet contient des promesses. La solution consiste à utiliser Ember.RSVP.hash comme:

model() {
  return Ember.RSVP.hash({
    employeeList: this.store.findAll('employee'),
    employee: Ember.Object.create()
  });
}

Cela retournera une promesse qui se résoudra lorsque toutes les promesses intérieures seront résolues.


Le deuxième problème est que vous ne pouvez pas utiliser this.get('model') dans un itinéraire. Si vous y réfléchissez, la propriété model est le crochet lui-même et non le modèle résolu. Solutions:

  1. Cette action est envoyée par le contrôleur/modèle. Ne pouvez-vous pas passer le modèle en tant que paramètre? De cette façon, vous pouvez accéder au modèle via les arguments de la fonction.
  2. Si vous en avez absolument besoin, this.modelFor(this.routeName); renvoie le modèle pour l'itinéraire actuel.
  3. Vous pouvez accéder au modèle en route via le contrôleur comme this.controller.get('model').
  4. Vous pouvez également implémenter le setupController hook et y accéder. Vous pouvez ensuite faire des choses comme this.set('employeeModel', model); pour un accès ultérieur.
31
miguelcobain
this.get('context')

vous donne accès au modèle dans l’action route.

0
steve_gallagher