Javascript Extjs3组件层次结构-获取所有子组件

Javascript Extjs3组件层次结构-获取所有子组件,javascript,extjs,Javascript,Extjs,我面临以下情况 我有一个模板,在这里面 formpanel中有另一个选项卡Panel 再次放置哪些表单元素 这是formpanel的一部分。 没什么了不起的。基本上是 formpanel,每个都有一些“子窗体” 包含在选项卡面板的选项卡中 现在,我添加了代码,当用户单击工具栏中的按钮时,可以显示/启用每个子窗体/选项卡。但是为了验证跳过禁用选项卡中的所有formelements,我还需要单独禁用tabpanel中的每个表单字段,以便在提交时跳过验证 这就是麻烦开始的时候。假设在其中一个选项卡/子

我面临以下情况

我有一个模板,在这里面 formpanel中有另一个选项卡Panel 再次放置哪些表单元素 这是formpanel的一部分。 没什么了不起的。基本上是 formpanel,每个都有一些“子窗体” 包含在选项卡面板的选项卡中

现在,我添加了代码,当用户单击工具栏中的按钮时,可以显示/启用每个子窗体/选项卡。但是为了验证跳过禁用选项卡中的所有formelements,我还需要单独禁用tabpanel中的每个表单字段,以便在提交时跳过验证

这就是麻烦开始的时候。假设在其中一个选项卡/子窗体中有一个字段集和另一个嵌套字段集。 如何获取选项卡/子窗体中包含的所有xtype:field元素



因此,基本上我要问的是如何获取选项卡的所有子组件,无论它们在组件层次结构中的深度如何?当我有一个收集所有子组件的方法时,就可以很容易地循环它们,并禁用从Ext.isXType('field')返回true的那些组件。。。但我不知道如何在引用包含组件时收集所有子组件。

编辑使用Mchl答案中的
findByType
。我被Ext文档中的一个错误误导了


您可以使用
Ext.Container.prototype.cascade

级联(函数fn、[对象范围]、[数组参数]):外部容器

级联到组件/容器 此组件的继承权(称为 首先),调用指定的函数 每一个组成部分。范围(本) 函数调用的范围将是 提供或当前组件。这个 函数的参数将是 提供的参数或当前参数 组成部分。如果函数返回 如果在任何点上为false,则级联为 停在那根树枝上

我在测试这个答案时使用了这种方法:

var children = [];
this.cascade(function(cmp) {
  if (cmp.isXType('field')) {
    children.push(cmp)
  }
});
子项
包含446个不同级别的字段实例。

这样:

var componentsArray = container.findByType('component');
甚至这个

var componentsArray = container.findBy(function(c) {return true});
(应该更快)


但是,应注意,这不会返回
tbar
bbar
按钮
属性的
Ext.Panel
后代中的组件。

文档对此有误导性。它说“查找组件…”,但返回类型是数组。您是否验证了一种方法或另一种方法?它实际上返回一个组件数组。查看代码,它返回
Ext.Container.findBy()
的结果,实际上,
var componentsArray=Container.findBy(函数(c){return true})也应该工作:D