Javascript 如何从Ember JS中的parentController获取子控制器的引用?

Javascript 如何从Ember JS中的parentController获取子控制器的引用?,javascript,validation,ember.js,Javascript,Validation,Ember.js,我有一个带有答案数组的问题模型对象。问题和答案都有一些属性需要验证。我正在使用余烬验证。当用户试图保存时,我需要触发对问题和答案的验证。因此,我正在触发问题控制器验证,但如何强制问题控制器等待应答控制器验证?由于AnswerController引用QuestionController(父级),因此它们可以观察父级上的属性并触发验证。但问题是如何强制QuestionController等待控制器验证的答案?问题有自己的属性,因此,QuestionController不能是arraycontroll

我有一个带有答案数组的问题模型对象。问题和答案都有一些属性需要验证。我正在使用余烬验证。当用户试图保存时,我需要触发对问题和答案的验证。因此,我正在触发问题控制器验证,但如何强制问题控制器等待应答控制器验证?由于AnswerController引用QuestionController(父级),因此它们可以观察父级上的属性并触发验证。但问题是如何强制QuestionController等待控制器验证的答案?问题有自己的属性,因此,QuestionController不能是arraycontroller

您的子控制器很可能与使用itemController的某个阵列控制器相关。使用数组控制器的上下文,您可以对其进行迭代,并且您将拥有子控制器的每个实例

App.FooController = Em.ArrayController.extend({
  itemController: 'bar',
  doSomething: function(){
    this.forEach(function(itemController){
      console.log(itemController);
    });
  }
});
但正如您所提到的,您的问题不是数组控制器,因此我猜测您可能正在使用模板中的itemController显示答案

{{#each foo in answers itemController='answer'}}

{{/each}}
这会出现问题,因为您无法访问控制器。但您可以通过
render

因此,你不需要做上述每一项,而是要做

{{render 'answers' answers}}
您有一个答案模板和一个答案控制器

模板 控制器 现在你可以迭代你的孩子了

{{#each foo in answers}}

{{/each}}
App.AnswersController = Em.ArrayController.extend({
  itemController: 'bar',
  doSomething: function(){
    this.forEach(function(itemController){
      console.log(itemController);
    });
  }
});