2013-12-16 72 views
0

我在Extjs中有繼承,並且我想要一個子類屬性與父類屬性(本例中爲列)合併。Extjs繼承奇數行爲

Ext.define('MyApp.view.Child', { 
    extend: 'MyApp.view.Parent', 
    title: 'Action Column Child extend ', 
    alias: 'widget.childpanel', 
    initComponent: function() { 
     //this merging very odd.   
     this.columns = Ext.apply(this.columns, [{ 
      text: 'Other', 
      dataIndex: 'other' 
     }]); 
     this.callParent(arguments) 
    } 
}); 

http://jsfiddle.net/PM6j6/

兩個問題:
1)我試圖合併子列屬性與母公司和合並工作的一部分,它增加了Other列,但去除的第一個家長。請參閱jsfiddle進行模擬。

2)當我渲染網格及其父,我點擊排序,這兩個網格進行排序。它就像一場碰撞。

感謝

回答

1
  1. 我認爲你需要clone父列,在這種情況下使用push

    initComponent: function() { 
        var clonedParentColumns = Ext.clone(this.superclass.columns); 
    
        clonedParentColumns.push({ 
         text: 'Other', 
         dataIndex: 'other' 
        }); 
    
        this.columns = clonedParentColumns; 
    
        this.callParent(arguments); 
    } 
    

    http://jsfiddle.net/jUE8j/

  2. 父母和子女有使用相同的store 。 (在該示例中存儲被用於它們中的每一個創建的:http://jsfiddle.net/jUE8j/2/

+0

謝謝,您的示例不會添加「其他」字段。我的問題有2個子問題。謝了哥們! – Shazam

+0

@Shazam:'Other'字段被添加到子網格中。 –

+0

是的,謝謝隊友! – Shazam

1

Ext.apply用於合併性質的一種對象到另一個。然而,網格的column config是列配置對象的數組

所以你只需要額外的列配置對象推到數組:

initComponent: function() { 
    this.columns.push({ 
     text: 'Other', 
     dataIndex: 'other' 
    }); 

    this.callParent(arguments); 
} 

至於你的第二個問題,有人已經提到,你需要使用一個不同的商店,如果你不想分揀機和篩選器應用於兩個網格。