如何从控制器访问模型?

How to access model from controller?

我似乎无法从控制器内部获取模型,即使控制器似乎设置了模型 属性。以下:

export default Ember.ObjectController.extend({
    init: function() {
        this._super();
        console.log(this.get('model'));
        console.log(this.model);
        console.log(this);
    }
}

打印出来:

有什么想法吗?

Ember.ObjectController 是模型的代理。因此,可以使用您在示例中找到的 this 来引用模型。那么在模板 {{this.aModelAttr}} 或 {{aModelAttr}} 中。就像你的问题表明它有点混乱。

从 Ember 1.11.0 开始,ObjectController 已弃用。因此,为了简化使用 Ember.Controller 并且在您的控制器中,您可以通过 this.get('model')

引用模型

然后在模板中使用{{model.aModelAttr}}

model 一个特定的域,即:书籍或用户名使用

export default Ember.Controller.extend({
    domainSpecificName: Ember.computed.alias('model')
}

然后在您的模板中您可以使用 {{domainSpecificName.aModelAttr}}

事实证明,当我通过设置断点来检查模型时,它是空的。我假设控制台显示内容,因为它会在内容到达后更新模型。

init() 中无法访问模型:

init: function() {
    this._super();
    console.log(this.get('model'));  // null
}

任何方法都相同.on('init'):

onInit: function() {
    console.log(this.get('model'));  // null
}.on('init'),

但是该模型可供操作访问(我假设是因为在调用操作时已经设置了模型):

someAction: function() {
    console.log(this.get('model'));  // model object as expected
}

所以回答我的问题,this.get('model') 可用于从控制器访问模型,但不能在 init().on('init') 方法中使用。