使用 itemId 获取组件 Extjs

问题描述 投票:1回答:2

我在标签页的渲染上遇到了问题。由于我在所有的标签页上使用了同一个组件,而该组件有带id的子组件,所以标签页的内容经常被混淆。由于id在所有的面板上都是一样的,所以组件经常会被混淆。现在我使用itemId代替id,tabs得到了正确的渲染。现在我又遇到了另一个问题。最初我使用Ext.getCmp(id)来获取控制器中的组件。现在,id被itemId取代了,我使用的是下面的方法。Ext.getCmp(id).getComponent(itemId);

视图中的组件有一个很深的嵌套,所有的中间组件都有 itemId。使用上面的语句,当我继续获取更深层次的组件时,语句一直延伸如。

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

我使用的语句正确吗?有没有更好的速记方法来达到目的?

请大家指教。

extjs
2个回答
5
投票

你可以使用Ext.ComponentQuery.query(.)或down()或up()来获取你所指的组件。

如果你想得到某个组件(比如说一个按钮)在某个组件中(比如说在一个容器中),你可以使用Ext.ComponentQuery.query(...)或down()或up()来得到你所指的组件。

 var button = Ext.ComponentQuery.query('button[type=messageButton]', this);

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

或者您可以使用

var button = this.query('button[type=messageButton]');

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

希望这能帮助你...


10
投票

基本上你使用它的方式是正确的,因为一个 "这个 "是指容器范围。itemId 只有在组件级才是唯一的(至少必须是这样)。但正如你所看到的,这样做会变得很丑陋,因此我严格建议你使用 Ext.ComponentQuery 或它的一个实现 up()down() 这两者对大多数组件都是可用的。其中 Ext.ComponentQuery 默认情况下,将查看所有实例化的组件。up()down() 将从它们被执行的组件开始,只在现有的组件树上行走。同时 up()down() 总是返回第一个匹配,其中 Ext.ComponentQuery 总是给你一个数组。

两者都接受相同的查询字符串,可以用不同的方式来写(这里我推荐你读一下 文件)

下面是一个例子。

Ext.getCmp(íd).getComponent(itemId1).getComponent(itemId2)

希望你使用的是面板(可以是任何组件)。

Ext.ComponentQuery.query('panel[id=yourId]>panel[itemId=yourId]>panel[itemId=yourId]');

假设你使用的是MVC,因此你所有的组件都是自定义的(有自己的xtypes)。所以,如果你知道你只有一个'yourcustompanel'的实例,并带有这个 itemId 你可以简单的调用。

Ext.ComponentQuery.query('yourcustompanel[itemId=yourId]') // note you get always a array
© www.soinside.com 2019 - 2024. All rights reserved.