Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs-使用自定义配置检索xtype_Extjs_Extjs4_Extjs4.2 - Fatal编程技术网

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

Extjs-使用自定义配置检索xtype,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,我定义了一个xtype: Ext.define('Sample.view.CustomTextfield', { extend: 'Ext.field.Text', customConfig: 'foo' . . . . }); 我现在想知道是否有使用customConfig创建组件的方法 执行类似于myPanel.add(Ext.getComponentByConfig('customConfig','foo'))的操作 是否有一个extjs可以这样做 注意: 自定义组件尚未呈现

我定义了一个xtype:

Ext.define('Sample.view.CustomTextfield', {
  extend: 'Ext.field.Text',
  customConfig: 'foo'
  . . . .
});
我现在想知道是否有使用
customConfig
创建组件的方法

执行类似于
myPanel.add(Ext.getComponentByConfig('customConfig','foo'))的操作

是否有一个extjs可以这样做

注意:

自定义组件尚未呈现,但已定义,因此使用
ComponentQuery
等(
.up()
.down()
等)进行回答是不正确的

编辑

下面是一个示例用例:

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);
}
假设您有一个对象键值对数组:

var myArray = [
  { config: 'customConfig', value: 'foo' },
  { config: 'anotherCustomConfig', value: 'bar' },
  . . . .
]

现在,我需要做的是在数组上循环并检索
config
属性,然后使用该属性检索具有该配置的xtype,其值等于
value
,即,对于config
customConfig
,其值为
foo
。简而言之,我希望使用
config->value
对象数组动态呈现视图。

如果您的目标是向面板添加自定义组件,则可以使用Ext.define中的alias属性并使用小部件名称添加它

 Ext.define('Sample.view.CustomTextfield', {
  extend: 'Ext.field.Text',
  alias: 'widget.foo'
  . . . .
});
在myPanel中,添加以下组件:

myPanel.add({ xtype :'foo',});

这是我的想法。我不知道这是否是正确的方法,但无论如何我都会分享。请随时改进:

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

可以这样使用:

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);
}
var myArray=[
{config:'customConfig',value:'foo'},
{config:'anotherCustomConfig',值:'bar'},
. . . .
];
for(var i=0,l=myArray.length;i

这将根据
config->value

动态地将项目添加到
myPanel
中,我已经知道,但是我需要的是仅使用
customConfig
实例化组件,您使用的是哪个extjs版本?我的帖子被精确地标记为
extjs4.2
.4.2.1。您的问题没有真正意义。@EvanTrimboli,请看editStill还是没有意义。我问题的哪一部分对你来说没有意义?你能详细解释一下吗?