这是超级课程:
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的正确方法?
答案 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]);
}
});