Ember:你如何从路由器访问模型?

时间:2013-06-15 12:59:58

标签: ember.js coffeescript

根据我所读到的内容(如果我弄错了,请纠正我),应该保存模型时应该保存模型以及下一步转换的逻辑应该在路由器中。

如果是这种情况,我遇到了一些问题:我不知道如何从路线访问模型。

这是我的控制器(按下提交后控制台记录“CREATED”):

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

我应该将这条逻辑移到路线上,对吧?我们试试吧:

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

注意:我知道提交事件从视图,控制器,然后最终路由起泡,停在任何一个已定义“提交”的路径上。因此,我想要路由来处理它,我删除了控制器。我能够在路线中看到任何console.log,我只需要能够到达模型实例。

我正在使用Ember v1.0.0-rc.5-7-g610589a

谢谢!

5 个答案:

答案 0 :(得分:73)

两个选项:this.currentModelthis.modelFor(routeName)

更新

我和SeñorAlexMatchneer谈到了这一点。 this.currentModel没有计划很快就会消失,但他认为this.modelFor(this.routeName)是公共API。

答案 1 :(得分:2)

应该做些什么

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

答案 2 :(得分:2)

this.currentModel并非如here所述的批准方式

但是在我的Ember版本中(1.11)this.modelFor(this.routeName)返回null,所以这对我有用

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

答案 3 :(得分:0)

您也可以使用this.controller.get('model');,但有计划删除控制器。

直到我们可以使用上面的代码来检索路线当前模型

答案 4 :(得分:0)

使用Ember 3.0.0,这是一种适用于我的文档化方式:

const model = this.controller.model;