在 Ember 中从控制器访问模型的正确方法是什么
What is the correct way to access the model from a controller in Ember
我想知道从控制器访问模型的正确方法是什么?
我注意到在控制器的 init 中模型仍然是 null
#controller.js
init(){
console.log(this.model); // IS NULL
}
但是 setupController 方法具有填充的 model。因此,目前我正在从 setupController 调用控制器的方法并将模型传递到那里。这样可以吗?
我在想控制器中会有一个回调方法,当控制器设置时会自动调用。
setupController
挂钩方法会将模型设置为 属性 到控制器。
setupController(controller,model){
this._super(...arguments);
}
您可以像在控制器中获取其他属性一样获取模型。 this.get('model')
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);
}
而且您不必在控制器上进行任何设置,这也可能会在控制器上为您提供模型。
我想知道从控制器访问模型的正确方法是什么?
我注意到在控制器的 init 中模型仍然是 null
#controller.js
init(){
console.log(this.model); // IS NULL
}
但是 setupController 方法具有填充的 model。因此,目前我正在从 setupController 调用控制器的方法并将模型传递到那里。这样可以吗?
我在想控制器中会有一个回调方法,当控制器设置时会自动调用。
setupController
挂钩方法会将模型设置为 属性 到控制器。
setupController(controller,model){
this._super(...arguments);
}
您可以像在控制器中获取其他属性一样获取模型。 this.get('model')
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);
}
而且您不必在控制器上进行任何设置,这也可能会在控制器上为您提供模型。