我有一个Question模型对象,它有答案数组。问题和答案都有一些属性需要验证。我正在使用ember-validations。当用户尝试保存时,我需要触发问题和答案的验证。所以,我正在触发Question控制器验证但是如何强制QuestionController等待AnswerControllers验证?由于AnswerControllers引用了QuestionController(父级),因此他们可以观察父级的属性并触发它们的验证。但问题是我如何强制QuestionController等待答案控制器验证?问题有自己的属性,因此,QuestionController不能是一个数组控制器!
答案 0 :(得分:2)
您的子控制器可能使用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);
});
}
});
现在你可以迭代你的孩子了。