2017-09-26 370 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準確 –