在扩展ExtJs类时修改而不是替换配置对象

时间:2015-03-28 07:59:34

标签: inheritance extjs extjs4.2

扩展ExtJs类时,配置对象将被新的替换。但有时我只想修改它们。

我举两个例子,如果可能的话,我想要一个通用的解决方案。

示例1.我有一个带工具栏和两个按钮的面板:

ExtJs.define('tbpanel', {
    extends: 'Ext.panel.Panel',
    tbar: [
        {text: 'Add'}, 
        {text: 'Remove'}
   ], 
   ... 
}) 

当我使用以下代码扩展它时,工具栏将被覆盖:

ExtJs.define('final', {
    extends: 'tbpanel',
    tbar: [
        {text: 'Modify'}
   ]
}) 

如何扩展面板,使最后一个面板上有一个包含所有三个按钮的工具栏?

示例2:我有一个带有代理配置对象的商店,该对象具有多个属性,例如:

ExtJs.define('mystore', {
    proxy: {
        type: 'json', 
        writer: ... 
        reader: ...
    } 
}) 

当我像这样扩展它时,显然所有代理配置都会丢失:

ExtJs.define('myspecialstore', {
    extends: 'mystore', 
    proxy: {
        extraParams: {special: true} 
    } 
}) 

如何以修改代理而非替换代理的方式扩展此商店?

我更喜欢通用的解决方案,而不是两个特定的解决方案。

1 个答案:

答案 0 :(得分:1)

尝试使用类构造函数获取商店proxy字段并在那里添加extraParams

constructor: function(config) {
    this.proxy['extraParams'] = {special: true};
    this.callParent(arguments);
}