我面临以下情况。
我有一个formpanel,在这之内 formpanel我有另一个tabpanel 再次形成元素放置 这是formpanel的一部分。 没什么了不起的。基本上是一个 formpanel每个都有一些“子形态” 包含在选项卡面板中的选项卡中。
现在,当用户单击工具栏中的按钮时,我添加了代码来取消/启用每个子窗体/选项卡。但是为了使验证能够跳过禁用选项卡中的所有元素,我还需要单独禁用tabpanel中的每个表单字段,以便在提交时跳过验证。
那是麻烦开始的时候。假设在其中一个选项卡/子表单中,我有一个带有另一个嵌套字段集的字段集。 如何获取选项卡/子表单中包含的所有xtype:field元素?
基本上我要问的是如何获取作为选项卡的子组件的所有组件,无论它们在组件层次结构中的深度如何?当我有一个收集所有子组件的方法时,很容易只是循环它们并禁用那些从Ext.isXType('field')返回true的那些...但我不知道如何在我有一个时收集所有子组件引用它包含组件。
答案 0 :(得分:2)
这样:
var componentsArray = container.findByType('component');
甚至是这个
var componentsArray = container.findBy(function(c) {return true});
(应该更快)
但应注意,这不会返回tbar
后代的bbar
,buttons
,Ext.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个不同级别的字段实例。