我需要通过单击按钮动态创建组件。我的限制是:
- 它将有一个以固定字符串(如“myComp_”)开头的 Id,后跟一个随机数
- 在任何时候,只有一个组件的 id 以“myComp_xxx”开头
所以在创建组件之前,我必须检查之前是否有任何创建并删除它......我的问题从这里开始。Ext.getCmp() 想要特定的 id。但我只有那个固定的字符串:myComp_...
有什么办法可以让之前创建的组件???
在此先感谢并为我的英语感到抱歉。
我需要通过单击按钮动态创建组件。我的限制是:
所以在创建组件之前,我必须检查之前是否有任何创建并删除它......我的问题从这里开始。Ext.getCmp() 想要特定的 id。但我只有那个固定的字符串:myComp_...
有什么办法可以让之前创建的组件???
在此先感谢并为我的英语感到抱歉。
对于 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
并设置在按钮配置中调用的属性。
你需要使用这个:Ext.getCmp(id)
Ext.getCmp("myComp_xxx");
听起来你应该使用普通的组件查询东西——一般来说使用 id 不是一个好主意。您可以按 xtype 和 itemId 查询(您可以手动分配)。
以下
Ext.ComponentQuery.query('grid form');
会找到所有带有 xtype 网格的东西,它们里面有表格。
Ext.ComponentQuery.query('grid #okButton');
而这里的 # 表示查找其中包含 itemId 'okButton' 的网格。
您可以将其嵌套到您需要的任何级别,并使用其他运算符更具体,正如其他人正确指出的那样,您可以在组件上使用 up 和 down 来相对于当前组件执行此操作。值得注意的是,当您使用 up 和 down 时,您只需得到第一个结果,而不是返回一个包含所有结果的数组。
有关详细信息,请参阅文档。
另请参阅此不良做法列表中的第 6 点,以了解更多原因
如果您知道将要创建组件的“位置”,另一种选择是使用这些up()/down()
方法。
例如,如果您有一个按钮并想要获取它包含在点击处理程序中的表单,您可以执行以下操作:
function myClickHandler(btn) {
var form = btn.up('form');
//do something with form
}