我似乎无法从控制器内部获取模型,即使控制器似乎具有模型属性集。以下内容:
export default Ember.ObjectController.extend({
init: function() {
this._super();
console.log(this.get('model'));
console.log(this.model);
console.log(this);
}
}
打印出来:
有什么想法吗?
答案 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}}