web-dev-qa-db-fra.com

Ember: comment accéder au modèle à partir du routeur?

Sur la base de ce que j'ai lu (corrigez-moi si je me trompe), la logique qui gère le moment où un modèle doit être enregistré et la prochaine étape de transition doit figurer dans le routeur.

Si tel est le cas, je rencontre un problème: Je ne sais pas comment accéder au modèle à partir de la route .

Voici mon contrôleur (et la console enregistre "CREATED" après avoir appuyé sur submit):

App.ScoutsNewController = Ember.ObjectController.extend
  submit: ->
    model = @get('model')
    model.on 'didCreate', ->
      console.log 'CREATED' # I want to  redirect to the index after creation
    model.save()

Je devrais déplacer cette logique dans la route, non? Essayons ça:

App.ScoutsNewRoute = Ember.Route.extend
  model: ->
    App.Scout.createRecord()

  events:
    submit: ->
      # Based on what I've read, the right place to put the code you see in the controller is here. How do I get access to the model?
      # I have tried @get('model'), @get('content')

Remarque: Je comprends que l'événement de soumission émerge de la vue vers le contrôleur, puis enfin la route, en s'arrêtant à n'importe lequel d'entre eux pour lequel "soumettre" est défini. Donc, puisque je veux que la route le gère, j'ai retiré le contrôleur. Je suis capable de voir n'importe quel console.log fait dans la route, je dois juste pouvoir accéder à l'instance du modèle.

J'utilise Ember v1.0.0-rc.5-7-g610589a

Merci!

31
Ramon Tayag

Deux options: this.currentModel ou this.modelFor(routeName)

Mettre à jour

J'ai parlé à ce dernier Alex Matchneer. Il n'est pas prévu que this.currentModel disparaisse de si tôt, mais il considère que this.modelFor(this.routeName) est l'API publique.

73
Luke Melia

this.currentModel n'est pas vraiment la manière approuvée telle que décrite ici

mais dans ma version d'Ember (1.11) this.modelFor(this.routeName) renvoie null, c'est donc ce qui a fonctionné pour moi

this.controllerFor(this.routeName).get('model')
2
Glenn Lawrence

ce qui devrait fonctionner est 

this.controllerFor('ScoutsNew').get('content')
2
peterfromearth

Avec Ember 3.0.0, ceci est une méthode documentée qui fonctionne pour moi:

const model = this.controller.model;
0
hlidka

Vous pouvez également utiliser this.controller.get('model'); mais il est prévu de supprimer le contrôleur. 

Jusqu'à ce que nous puissions utiliser le code ci-dessus pour récupérer les itinéraires du modèle actuel 

0
Vinoth Kumar