Ember: how do you access the model from the router?


December 2018


18.8k time


Based on what I've read (please correct me if I'm mistaken), the logic that handles when a model should be saved and where to transition next should be in the router.

If that is the case, I'm running into a bit of a problem: I don't know how to access the model from the route.

This is my controller (and the console logs "CREATED" after I press 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

I should move that logic into the route, right? Let's try that:

App.ScoutsNewRoute = Ember.Route.extend
  model: ->

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

Note: I understand that the submit event bubbles up from the view, to the controller, then finally the route, stopping at any one of them that has "submit" defined. So since I want the route to handle it, I removed the controller. I'm able to see any console.log done in the route, I just need to be able to get to the model instance.

I'm using Ember v1.0.0-rc.5-7-g610589a


5 answers


Возможны два варианта: this.currentModelилиthis.modelFor(routeName)


Я говорил с сеньором Алекс Matchneer об этом. Там нет никаких планов this.currentModelуходить в ближайшее время, но он считает this.modelFor(this.routeName)общественный API.


что должно работать в


С Ember 3.0.0 это документировано способ, который работает для меня:

const model = this.controller.model;

Кроме того, можно использовать , this.controller.get('model');но есть планы , чтобы удалить контроллер.

До этого мы можем использовать приведенный выше код для получения маршрутов текущей модели


this.currentModelна самом деле не утвержден способ , как описано здесь

но в моей версии Эмбер (1,11) this.modelFor(this.routeName)возвращает нуль, так это то , что работает для меня