2015-05-04 75 views
0

我已經得到了在Ext JS的5延伸Ext.form.Panel父面板大致如下定義一個父類ParentPanel父類,擴展Ext.form.Panel,添加DockedItmes

Ext.define('...ParentPanel', { 

    config : { 
     isItTrue : true 
    }, 

    dockedItems: [], 

    initComponent : function() { 
     var me = this; 

     //If some evaluation is true... 
     if (isItTrue) { 
      me.dockedItems.push({ 
       // the components I am trying to add... 
      }); 

     this.callParent(): 
    } 

    //.... 

的基本問題是什麼類延伸ParentPanel將調用initComponent函數,將項目添加到dockedItems配置。每true評估(所以我最終重複,因爲每個孩子都分享父母的dockedItems配置。)。我想要要做的只是將該項目添加到配置的繼承類dockedItems,而不是父項。

這甚至可能是Ext JS?如果是這樣,理解設計問題,我將如何解決這個問題?

回答

1

事情是這樣的:

initComponent: function() { 
    this.dockedItems = []; 
    // ... 
} 

ExtJS的不更改JavaScript的性質......

+0

所以,不保持在父的全局引用'dockedItems',然後呢?只需通過'initComponent'將「停靠的項目」添加到調用的子項中? (只要確保我明白) – Thomas

+0

我喜歡設計決定。比我想要建議的更好:每個孩子都有一個'dockedItems'配置。默認爲'[]',即保持它自己的「本地」引用到'dockedItems'配置。 – Thomas

+0

分機確實不希望你有多個實例之間共享的引用(數組,對象...)。它會自己修改它們(例如,它會用'items'中的實際實例替換所有配置對象等)。如果你這樣做,你會變得很奇怪,很難調試行爲。 – rixo