在 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);
      }

而且您不必在控制器上进行任何设置,这也可能会在控制器上为您提供模型。