javascript - 如何在 Ember JS 中从父 Controller 获取子 Controller 的引用?

标签 javascript validation ember.js

我有一个包含答案数组的问题模型对象。 Question 和 Answer 都有一些需要验证的属性。我正在使用 Ember 验证。当用户尝试保存时,我需要触发对问题和答案的验证。所以,我正在触发问题 Controller 验证,但如何强制问题 Controller 等待 AnswerControllers 验证?由于 AnswerController 引用了 QuestionController(父级),它们可以观察父级的属性并触发它们的验证。但问题是我如何强制 QuestionController 等待答案 Controller 验证? Question 有自己的属性,因此 QuestionController 不能是数组 Controller !

最佳答案

您的子 Controller 很可能与使用 itemController 的某些数组 Controller 相关。使用数组 Controller 的上下文,您可以迭代它,您将拥有子 Controller 的每个实例。

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

但正如您所提到的,您的问题不是数组 Controller ,所以我猜测您可能是在模板中使用 itemController 来显示答案

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

{{/each}}

这会带来一个问题,因为您无权访问 Controller 。但是您可以使用 render

来克服这个问题

所以你不是做上面的每一个,而是做

{{render 'answers' answers}}

并且您有一个答案模板和一个答案 Controller 。

模板

{{#each foo in answers}}

{{/each}}

Controller

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

现在您可以迭代您的 child 。

关于javascript - 如何在 Ember JS 中从父 Controller 获取子 Controller 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006433/

相关文章:

javascript - 如何设置下拉数组的值

ember.js - EmberJS 路由器应用程序 : Views vs Controllers

javascript - EmberJS 嵌套资源模板不起作用

javascript - 规范的 Node.js

javascript - fancybox 下一个和上一个按钮在移动设备中不起作用

Json 模式检查所有项目枚举是否存在于对象数组中

jQuery 验证未突出显示所有字段

ruby-on-rails - rails 验证以检查整数的长度并在错误时显示消息

javascript - Ember 中的 View /状态逻辑应该放在哪里?

javascript - 使用 JS/jQuery 启用/禁用 DOM 元素的事件