我已经定义了一个xtype:
Ext.define('Sample.view.CustomTextfield', {
extend: 'Ext.field.Text',
customConfig: 'foo'
. . . .
});
我现在想要使用customConfig
创建组件的方法。
执行myPanel.add(Ext.getComponentByConfig('customConfig', 'foo'));
是否有这样做的极限?
注意:
自定义组件尚未呈现,但已定义,因此使用ComponentQuery
等(.up()
,.down()
等)的答案不正确。
修改:
以下是一个用例示例:
据说你有一组对象键值对:
var myArray = [
{ config: 'customConfig', value: 'foo' },
{ config: 'anotherCustomConfig', value: 'bar' },
. . . .
]
现在,我需要做的是遍历数组并检索config
属性,然后我将使用该属性来检索具有该值等于value
的配置的xtype,即,对于值customConfig
的配置foo
。简而言之,我想使用config->value
对象数组动态渲染视图。
答案 0 :(得分:1)
所以,这就是我想到的。我不知道这是否是正确的方法,但无论如何我都会分享。请随时改进:
Ext.createBy = function (config, value) {
var classes = Ext.ClassManager.classes;
for (var cls in classes) {
if (classes.hasOwnProperty(cls)) {
var c = classes[cls];
if ((c[config] && c[config] === value) || (c.prototype && c.prototype[config] && c.prototype[config] === value)) {
return Ext.create(classes[cls].getName());
}
}
}
}
这个函数Ext.createBy
做的是迭代Ext.ClassManager
所持有的类,并检查类是否有config
和参数中提供的值。然后它使用通过测试的Ext.create
来调用。{/ p>
可以这样使用:
myPanel.add(Ext.createBy('someConfig', 'someValue'));
或者,与我的示例用例有关:
var myArray = [
{ config: 'customConfig', value: 'foo' },
{ config: 'anotherCustomConfig', value: 'bar' },
. . . .
];
for (var i = 0, l = myArray.length; i < l; i++) {
var obj = myArray[i];
myPanel.add(Ext.createBy(obj.config, obj.value);
}
这会根据myPanel
动态将项目添加到config->value
。
答案 1 :(得分:0)
如果您的目标是将自定义组件添加到面板,则可以在Ext.define中使用别名属性并使用窗口小部件名称添加它。
Ext.define('Sample.view.CustomTextfield', {
extend: 'Ext.field.Text',
alias: 'widget.foo'
. . . .
});
在myPanel中,添加此组件,如
myPanel.add({ xtype :'foo',});