7

我需要通过单击按钮动态创建组件。我的限制是:

  1. 它将有一个以固定字符串(如“myComp_”)开头的 Id,后跟一个随机数
  2. 在任何时候,只有一个组件的 id 以“myComp_xxx”开头

所以在创建组件之前,我必须检查之前是否有任何创建并删除它......我的问题从这里开始。Ext.getCmp() 想要特定的 id。但我只有那个固定的字符串:myComp_...

有什么办法可以让之前创建的组件???

在此先感谢并为我的英语感到抱歉。

4

5 回答 5

8

对于 ExtJs 4.X 使用Ext.ComponentQuery.query('*[id^=myComp_xxx]');

对于 ExtJs 3.X,您可以使用以下

var el = Ext.query('*[id^=myComp_xxx]');
var cmp = Ext.getCmp(el.id);

或者(这个我没有亲自尝试过,但我认为它应该可以工作)如果组件是您可以访问的组件的子组件,那么:

var el = parentComp.find("action","btn");

action : btn并设置在按钮配置中调用的属性。

于 2012-10-12T14:59:42.133 回答
6

我认为您正在寻找的是DomQuery

前任:

Ext.query("*[id^=myComp_xxx]")
于 2012-10-12T13:35:12.290 回答
2

你需要使用这个:Ext.getCmp(id)

Ext.getCmp("myComp_xxx");
于 2012-10-12T13:45:13.940 回答
2

听起来你应该使用普通的组件查询东西——一般来说使用 id 不是一个好主意。您可以按 xtype 和 itemId 查询(您可以手动分配)。

以下

Ext.ComponentQuery.query('grid form');  

会找到所有带有 xtype 网格的东西,它们里面有表格。

Ext.ComponentQuery.query('grid #okButton');  

而这里的 # 表示查找其中包含 itemId 'okButton' 的网格。

您可以将其嵌套到您需要的任何级别,并使用其他运算符更具体,正如其他人正确指出的那样,您可以在组件上使用 up 和 down 来相对于当前组件执行此操作。值得注意的是,当您使用 up 和 down 时,您只需得到第一个结果,而不是返回一个包含所有结果的数组。

有关详细信息,请参阅文档

另请参阅此不良做法列表中的第 6 点,以了解更多原因

于 2014-02-13T16:12:48.147 回答
0

如果您知道将要创建组件的“位置”,另一种选择是使用这些up()/down()方法。

例如,如果您有一个按钮并想要获取它包含在点击处理程序中的表单,您可以执行以下操作:

function myClickHandler(btn) {
     var form = btn.up('form');

     //do something with form 
}
于 2012-10-12T15:36:14.463 回答