我遇到了标签渲染问题。选项卡的内容用于混淆,因为我在所有选项卡上使用相同的组件,组件具有id的子组件。由于id在所有面板上看起来都相同,因此用于混淆的组件。我现在使用itemId而不是id,并且标签正在正确呈现。 现在我面临另一个问题。最初我使用Ext.getCmp(id)来获取控制器中的组件。现在ids被itemId取代,我使用以下内容: Ext.getCmp(ID).getComponent(的itemId);
视图中有一个深层嵌套组件,所有中间组件都有itemId。通过上面的语句,当我继续获取更深层次的组件时,语句继续扩展如下:
Ext.getCmp(ID).getComponent(itemId1).getComponent(itemId2).getComponent(....;
我是否正确使用了该声明?是否有更好的速记方法来达到目的?
请建议。
答案 0 :(得分:10)
基本上你以正确的方式使用它,因为itemId
仅在组件级别是唯一的(至少它必须)。但正如您可能会发现这会有点难看,因此我严格建议您使用Ext.ComponentQuery
或其中一个实施up()
和down()
组件。其中Ext.ComponentQuery
默认情况下查看所有实例化组件up()
和down()
将从执行它们的组件开始,仅遍历现有组件树。此外,up()
和down()
始终返回第一个匹配项,其中Ext.ComponentQuery
始终为您提供数组。
两者都接受可以用各种方式编写的相同查询字符串(这里我建议你阅读docs)
以下是一个示例:
Ext.getCmp(íd).getComponent(itemId1).getComponent(itemId2)
期待您使用面板(可以是任何组件)
Ext.ComponentQuery.query('panel[id=yourId]>panel[itemId=yourId]>panel[itemId=yourId]');
假设您正在使用MVC,因此您的所有组件都是自定义的(具有自己的xtypes)。因此,如果您知道,您只有一个&c 39; yourcustompanel'使用此itemId
,您可以简单地致电:
Ext.ComponentQuery.query('yourcustompanel[itemId=yourId]') // note you get always a array
答案 1 :(得分:5)
您可以使用Ext.ComponentQuery.query(..)或down()或up()来获取您所引用的组件。
如果您想在某个组件中(例如在容器内)获取组件(例如按钮),您可以使用
var button = Ext.ComponentQuery.query('button[type=messageButton]', this);
在上面的'这个'是指容器范围。
或者您可以使用
var button = this.query('button[type=messageButton]');
在上面也是'这个'是指容器范围。
希望这可以帮助你..