使用itemId获取组件Extjs

vru*_*ush 1 extjs

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

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

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

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

请指教.

sra*_*sra 10

基本上你以正确的方式使用它,因为a itemId只在组件级别是唯一的(至少它必须).但正如您可能会看到这会变得有点难看,因此我严格建议您使用Ext.ComponentQuery或其中一个实现,up()并且down()它们都可用于大多数组件.当Ext.ComponentQuery每默认情况下会去翻所有实例化的组件up(),并down()会于它们执行的组件开始,仅通过现有的组件树行走.此外up(),down()始终返回第一个匹配,Ext.ComponentQuery始终显示一个数组.

两者都接受可以用各种方式编写的相同查询字符串(这里我建议你阅读文档)

这是一个例子:

Ext.getCmp(íd).getComponent(itemId1).getComponent(itemId2)
Run Code Online (Sandbox Code Playgroud)

期待你正在使用面板(它可以是任何组件)

Ext.ComponentQuery.query('panel[id=yourId]>panel[itemId=yourId]>panel[itemId=yourId]');
Run Code Online (Sandbox Code Playgroud)

假设您正在使用MVC,因此您的所有组件都是自定义的(具有自己的xtypes).所以如果你知道,你只有一个'yourcustompanel'实例,itemId你可以简单地调用:

Ext.ComponentQuery.query('yourcustompanel[itemId=yourId]') // note you get always a array
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用Ext.ComponentQuery.query(..)或down()或up()来获取您引用的组件.

如果您想在某个组件(例如容器内)中获取组件(例如按钮),则可以使用

 var button = Ext.ComponentQuery.query('button[type=messageButton]', this);
Run Code Online (Sandbox Code Playgroud)

在上面'this'指的是容器范围.

或者你可以使用

var button = this.query('button[type=messageButton]');
Run Code Online (Sandbox Code Playgroud)

在上面也'this'指的是容器范围.

希望这可以帮助你..