我需要通过单击按钮动态创建组件。我的限制是:
所以在创建组件之前我必须检查之前是否有任何创建并删除它...我的问题从这里开始。 Ext.getCmp()需要特定的id。但我只有那个固定的字符串:myComp _...
有没有办法在???
之前创建组件提前致谢并对我的英语表示抱歉。
答案 0 :(得分:6)
答案 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
}