如何从控制器访问模型?

时间:2015-04-21 05:02:14

标签: ember.js ember-cli

我似乎无法从控制器内部获取模型,即使控制器似乎具有模型属性集。以下内容:

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

打印出来:

enter image description here

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

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')方法。

答案 1 :(得分:3)

an 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}}