使用itemId获取组件Extjs

时间:2014-06-25 04:09:30

标签: extjs

我遇到了标签渲染问题。选项卡的内容用于混淆,因为我在所有选项卡上使用相同的组件,组件具有id的子组件。由于id在所有面板上看起来都相同,因此用于混淆的组件。我现在使用itemId而不是id,并且标签正在正确呈现。 现在我面临另一个问题。最初我使用Ext.getCmp(id)来获取控制器中的组件。现在ids被itemId取代,我使用以下内容: Ext.getCmp(ID).getComponent(的itemId);

视图中有一个深层嵌套组件,所有中间组件都有itemId。通过上面的语句,当我继续获取更深层次的组件时,语句继续扩展如下:

Ext.getCmp(ID).getComponent(itemId1).getComponent(itemId2).getComponent(....;

我是否正确使用了该声明?是否有更好的速记方法来达到目的?

请建议。

2 个答案:

答案 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]');

在上面也是'这个'是指容器范围。

希望这可以帮助你..