我想知道从控制器访问模型的正确方法是什么?
我注意到在控制器的 init 中,模型仍为空
#controller.js
<input type="radio" id="male" name="gender" value="male"> Male
<input type="radio" id="female" name="gender" value="female"> Female
但是 setupController 方法具有填充的模型。因此,目前我从 setupController 调用控制器的方法,并在那里传递模型。这样好吗?
我在想控制器中会有一个回调方法,在设置控制器时会自动调用。
答案 0 :(得分:2)
route.js
model() {
return this.store.findAll("post");
},
setupController(controller, model){
controller.set('model', model);
}
这将给出控制台日志模型,它是post对象的集合。
controller.js
init(){
console.log(this.model);
}
我们大多数情况下这样做,特别是如果你使用RSVP承诺 你选择了控制器上的模型。
实施例
model(params) {
return Ember.RSVP.hash({
lecture: this.store.findRecord('section', params.section_id).then((section)=>{
return this.store.createRecord('lecture',{
section: section
});
}),
section:this.store.findRecord('section', params.section_id),
course: this.store.query('course',{filter:{section_id:params.section_id}})
});
},
setupController(controller,model){
controller.set('model', model.lecture);
controller.set('section', model.section);
controller.set('course', model.course);
}
请注意,如果您只有路线上的简单模型
model(params) {
return this.store.findRecord('course', params.course_id);
}
并且您不必在控制器上进行任何设置,这也可以在控制器上为您提供模型。
答案 1 :(得分:1)
setupController
hook方法将model设置为控制器的属性。
setupController(controller,model){
this._super(...arguments);
}
您可以像控制器中的普通其他属性一样获取模型。 this.get('model')