Extjs - 使用自定义配置检索xtype

时间:2017-09-26 11:00:41

标签: extjs extjs4 extjs4.2

我已经定义了一个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对象数组动态渲染视图。

2 个答案:

答案 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',});