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

时间:2011-01-20 17:01:16

标签: javascript extjs

我面临以下情况。

  

我有一个formpanel,在这之内   formpanel我有另一个tabpanel   再次形成元素放置   这是formpanel的一部分。   没什么了不起的。基本上是一个   formpanel每个都有一些“子形态”   包含在选项卡面板中的选项卡中。

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

那是麻烦开始的时候。假设在其中一个选项卡/子表单中,我有一个带有另一个嵌套字段集的字段集。 如何获取选项卡/子表单中包含的所有xtype:field元素?


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

2 个答案:

答案 0 :(得分:2)

这样:

var componentsArray = container.findByType('component');

甚至是这个

var componentsArray = container.findBy(function(c) {return true});

(应该更快)

但应注意,这不会返回tbar后代的bbarbuttonsExt.Panel属性中的组件。

答案 1 :(得分:1)

修改使用Mchl答案中的findByType。我被Ext文档中的错误误导了。


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

  

级联(函数fn,[对象范围],[数组args]):Ext.Container

     

级联组件/容器   来自这个组成部分的heirarchy(称为   首先),调用指定的函数   与每个组件。范围(本)   函数调用将是范围   提供或当前组件。该   该函数的参数将是   args提供或当前   零件。如果函数返回   任何时候都是假的,级联是   停在那个分支上。

我在测试这个答案时用这种方式:

var children = [];
this.cascade(function(cmp) {
  if (cmp.isXType('field')) {
    children.push(cmp)
  }
});

children包含446个不同级别的字段实例。