it-swarm.com.de

Ember: Wie greift man vom Router auf das Modell zu?

Basierend auf dem, was ich gelesen habe (bitte korrigieren Sie mich, wenn ich mich irre), sollte die Logik, die beim Speichern eines Modells gilt, und die Stelle, an der der Übergang erfolgen soll, im Router liegen.

Wenn dies der Fall ist, stoße ich auf ein Problem: Ich weiß nicht, wie ich von der Route auf das Modell zugreifen kann .

Dies ist mein Controller (und die Konsole protokolliert "CREATED", nachdem ich auf "Senden" geklickt habe):

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()

Ich sollte diese Logik in den Weg bringen, richtig? Versuchen wir das mal:

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')

Hinweis: Ich verstehe, dass das Übermittlungsereignis aus der Ansicht zum Controller und dann schließlich zur Route sprudelt und bei einem von ihnen angehalten wird, für das "Übergeben" definiert wurde. Da ich möchte, dass die Route damit fertig wird, entfernte ich den Controller. Ich kann jeden console.log sehen, der in der Route erstellt wurde. Ich muss nur in der Lage sein, zur Modellinstanz zu gelangen.

Ich verwende Ember v1.0.0-rc.5-7-g610589a

Vielen Dank!

31
Ramon Tayag

Zwei Optionen: this.currentModel oder this.modelFor(routeName)

Aktualisieren

Ich habe mit Señor Alex Matchneer darüber gesprochen. Es ist nicht geplant, this.currentModel in absehbarer Zeit zu verschwinden, aber er hält this.modelFor(this.routeName) für die öffentliche API.

73
Luke Melia

this.currentModel ist nicht wirklich der genehmigte Weg wie beschrieben hier

in meiner Version von Ember (1.11) gibt this.modelFor(this.routeName) jedoch null zurück

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

was sollte funktionieren ist 

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

Mit Ember 3.0.0 ist dies ein dokumentierter Weg, der für mich funktioniert:

const model = this.controller.model;
0
hlidka

Sie können auch this.controller.get('model'); verwenden, es ist jedoch geplant, den Controller zu entfernen. 

Bis dahin können wir den obigen Code verwenden, um das aktuelle Modell der Routen abzurufen 

0
Vinoth Kumar