ExtJs以字符串开头的id选择组件

时间:2012-10-12 13:21:07

标签: extjs

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

  1. 它会以一个固定的字符串开头,例如'myComp_',然后是一个随机数
  2. 在任何时候,只有一个组件的id以“myComp_xxx”
  3. 开头

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

    有没有办法在???

    之前创建组件

    提前致谢并对我的英语表示抱歉。

5 个答案:

答案 0 :(得分:6)

我认为你要找的是DomQuery

例如:

Ext.query("*[id^=myComp_xxx]")

答案 1 :(得分:6)

对于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的属性。

答案 2 :(得分:2)

您需要使用此:Ext.getCmp(id)

Ext.getCmp("myComp_xxx");

答案 3 :(得分:2)

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

以下

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

会找到所有带有xtype网格的东西,里面有形式。

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

而#这里说的是寻找带有itemId'okButton'的网格。

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

有关详细信息,请参阅the documentation

另请参阅此list of bad practices上的第6点,以避免更多原因

答案 4 :(得分:0)

如果您知道要在哪里创建组件,另一种方法是使用up()/down()方法。

E.g。如果你有一个按钮,并希望获得它包含在点击处理程序中的表单,你可以这样做:

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

     //do something with form 
}