我在标签页的渲染上遇到了问题。由于我在所有的标签页上使用了同一个组件,而该组件有带id的子组件,所以标签页的内容经常被混淆。由于id在所有的面板上都是一样的,所以组件经常会被混淆。现在我使用itemId代替id,tabs得到了正确的渲染。现在我又遇到了另一个问题。最初我使用Ext.getCmp(id)来获取控制器中的组件。现在,id被itemId取代了,我使用的是下面的方法。Ext.getCmp(id).getComponent(itemId);
视图中的组件有一个很深的嵌套,所有的中间组件都有 itemId。使用上面的语句,当我继续获取更深层次的组件时,语句一直延伸如。
Ext.getCmp(id).getComponent(itemId1).getComponent(itemId2).getComponent(....;
我使用的语句正确吗?有没有更好的速记方法来达到目的?
请大家指教。
你可以使用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'也是指容器范围。
希望这能帮助你...
基本上你使用它的方式是正确的,因为一个 "这个 "是指容器范围。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