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!
Deux options: this.currentModel
ou this.modelFor(routeName)
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.
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')
ce qui devrait fonctionner est
this.controllerFor('ScoutsNew').get('content')
Avec Ember 3.0.0, ceci est une méthode documentée qui fonctionne pour moi:
const model = this.controller.model;
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