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

时间:2014-03-19 02:45:19

标签: 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: '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的方法,以便递归地合并配置。这可能吗?我已经查看了构造函数配置属性,但它似乎没有帮助。

1 个答案:

答案 0 :(得分:0)

我的解决方案:

父类:

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'
            }
        }
    }
});