在ExtJS中,扩展对象时如何为嵌套元素指定默认配置?

在ExtJS中,扩展对象时如何为嵌套元素指定默认配置?,extjs,Extjs,使用ExtJS 4.1.3,我想创建一个通用的Ext.data.Store,以使用站点范围,作为多个页面的基础。以下是我的常用代码: Ext.define('Common.data.Store', { extend: 'Ext.data.Store', pageSize: 50, proxy: { type: 'ajax', timeout: 1000 * 120, reader: { type: '

使用ExtJS 4.1.3,我想创建一个通用的Ext.data.Store,以使用站点范围,作为多个页面的基础。以下是我的常用代码:

Ext.define('Common.data.Store', {
    extend: 'Ext.data.Store',
    pageSize: 50,
    proxy: {
        type: 'ajax',
        timeout: 1000 * 120,
        reader: {
            type: 'json',
            totalProperty: 'results'
        }
    }
});
然后,我扩展Common.data.Store并仅配置页面唯一的字段:

Ext.define('Test.store.Test', {
    extend: 'Common.data.Store',
    model: 'testModel',
    proxy: {
        api: {
            read:'/test/getTest/'
        },
        reader: {
            root: 'test'
        }
    }
});
问题是配置没有递归合并,因此公共存储扩展中的嵌套配置完全覆盖了公共存储的嵌套配置。我需要知道一种基本上在配置上执行Ext.apply的方法,以便递归地合并配置。这可能吗?我已经研究了constructor config属性,但它似乎没有帮助。

我的解决方案:

父类:

Ext.define('Common.data.Store', {
    extend: 'Ext.data.Store',
    config: {
        pageSize: 50,
        proxy: {
            type: 'ajax',
            timeout: 120000,
            reader: {
                type: 'json',
                totalProperty: 'results'
            }
        }
    },
    constructor: function(config)
    {
        this.initConfig(Ext.merge(JSON.parse(JSON.stringify(Common.data.Store.prototype.getInitialConfig())), Ext.merge(JSON.parse(JSON.stringify(this.getInitialConfig())), config)));
        this.callParent(arguments);
    }
});
儿童班:

Ext.define('Test.store.Test', {
    extend: 'Common.data.Store',
    model: 'Test.model.Test',
    config: {
        proxy: {
            api: {
                read:'/test/getTest/'
            },
            reader: {
                root: 'test'
            }
        }
    }
});

您需要在
Common.data.Store
的构造函数中将它们合并在一起。我已经尝试过了,但是传入构造函数的配置参数似乎没有实现这一点所需的一切。@astonius您必须手动完成,Ext中没有递归合并这些属性的实用程序。@Andrei,我很好,但是我在哪里以及如何做呢?我建议你阅读这个论坛的规则。答案不会问其他问题。