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

Refresh

December 2018

Views

18.8k time

31

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
    model.save()

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

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

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

Thanks!

5 answers

73

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

Обновить

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

2

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

this.controllerFor('ScoutsNew').get('content')
0

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

const model = this.controller.model;
0

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

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

2

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

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

this.controllerFor(this.routeName).get('model')