扩展Ext.data.Store

时间:2014-05-23 19:34:12

标签: javascript extjs

这是超级课程:

Ext.define('My.store.Direct', {
    extend: 'Ext.store.Direct',
    paramsAsHash: true,
    proxy: {
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'total'
        },
        type: 'direct',
    }
});

在子类中,我只需要设置API配置。我试过了:

Ext.define('My.store.User', {
        extend: 'My.store.Direct',
        model: 'My.model.User',
        storeId: 'user',
        constructor: function () {
            this.callParent(arguments);
            this.getProxy().api.read = RPC.UserApi.read;
        }}
);

Ext.define('My.store.Post', {
        extend: 'My.store.Direct',
        model: 'Mehr.model.Post',
        storeId: 'post',
        constructor: function () {
            this.callParent(arguments);
            this.getProxy().api.read = RPC.PostApi.read;
        }}
);

不幸的是,在执行代码之后,两个商店都将拥有第一个子类的api.read。这有什么问题?什么是扩展stroes的正确方法?

1 个答案:

答案 0 :(得分:1)

在构造函数中创建代理,否则代理转到My.store.Direct的原型,因为它是一个对象,而不是基本类型(int,string,bool),它可以通过引用访问。因此,在一个实例中更改代理会更改所有实例 - 实际上只有一个代理。

所以基类应该定义类似于

Ext.define('My.store.Direct', {
    extend: 'Ext.data.DirectStore',
    paramsAsHash: true,
    constructor:function(config) {
      Ext.merge(config, {proxy: {
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'total'
        },
        type: 'direct'
    }
    });
        this.callParent([config]);
    }
});