2017-09-26 80 views
0

我已经定义了一个检索的xtype的xtype:ExtJS的 - 使用自定义配置

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' }, 
    . . . . 
] 

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

+0

你的问题没有意义。 –

+0

@EvanTrimboli,请参阅编辑 –

+0

仍然没有任何意义。 –

回答

1

所以,这里的whay我想出了。我不知道这是否是正确的做法,但我会分享这个。请随意提高这一点:

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); 
} 

这将动态地将项目添加到myPanel取决于config->value

0

如果您的目标是将自定义组件添加到面板,则可以在Ext.define中使用别名属性并使用该widget名称进行添加。

Ext.define('Sample.view.CustomTextfield', { 
    extend: 'Ext.field.Text', 
    alias: 'widget.foo' 
    . . . . 
}); 

在myPanel,加入这种成分类似,

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

我已经知道,但我需要的是仅使用'customConfig' –

+0

哪些extjs版本使用的实例化组件? – AswathyPrasad

+0

我的文章被标记为“extjs4.2”.. 4.2.1准确 –