ember.js - Ember: ¿cómo accedes al modelo desde el enrutador?
coffeescript (5)
Con Ember 3.0.0 esta es una forma documentada que funciona para mí:
const model = this.controller.model;
De acuerdo con lo que he leído (corríjanme si me equivoco), la lógica que maneja cuándo se debe guardar un modelo y dónde hacer la transición siguiente debe estar en el enrutador.
Si ese es el caso, me encuentro con un pequeño problema: no sé cómo acceder al modelo desde la ruta .
Este es mi controlador (y los registros de la consola "CREADOS" después de presionar enviar):
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()
Debería mover esa lógica a la ruta, ¿verdad? Probemos eso:
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'')
Nota: Entiendo que el evento de envío brota desde la vista, al controlador y finalmente a la ruta, deteniéndose en cualquiera de ellos que tenga definido "enviar". Entonces, como quiero que la ruta lo maneje, eliminé el controlador. Puedo ver cualquier console.log
hecho en la ruta, solo necesito poder acceder a la instancia del modelo.
Estoy usando Ember v1.0.0-rc.5-7-g610589a
¡Gracias!
Dos opciones: this.currentModel
o this.modelFor(routeName)
Actualizar
Hablé con el Señor Alex Matchneer sobre esto. No hay planes para que this.currentModel
desaparezca pronto, pero considera this.modelFor(this.routeName)
la API pública.
También podría usar this.controller.get(''model'');
pero hay planes para eliminar el controlador.
Hasta que podamos usar el código anterior para recuperar las rutas del modelo actual
lo que debería funcionar es
this.controllerFor(''ScoutsNew'').get(''content'')
this.currentModel
no es realmente el camino aprobado como se describe here
pero en mi versión de Ember (1.11) this.modelFor(this.routeName)
devuelve nulo, así que esto es lo que funcionó para mí
this.controllerFor(this.routeName).get(''model'')