我试图通过改变代理URL(实际端点而不是params)来重用商店。是否可以使用以下语法覆盖商店实例的代理URL:
{
...some view config ...
store: Ext.create('MyApp.store.MyTasks',{proxy:{url:'task/my.json'}}),
}
如果已在商店定义中明确定义了代理?
编辑:AbstractStore源代码按以下方式设置代理
if (Ext.isString(proxy)) {
proxy = {
type: proxy
};
}
解决方案:store.getProxy()。url ='task / myMethod.json';
答案 0 :(得分:4)
{
... some tab config ...
store: Ext.create('MyApp.store.MyTasks'),
listeners: {
afterrender: function(tab) {
tab.store.getProxy().url = 'task/myMethod.json'; //<--Saki magic :)
tab.store.load();
}
}
}
http://www.sencha.com/forum/showthread.php?149809-Reusing-Store-by-changing-Proxy-URL
答案 1 :(得分:3)
创建商店时,不能单独覆盖代理的URL。您必须通过完整的代理。这是因为,库替换了代理作为一个整体!所以,你能做的是:
{
...some view config ...
store: Ext.create('MyApp.store.MyTasks',{
proxy: {
type: 'ajax',
url : 'task/my.json',
reader: {
type: 'json',
root: 'rows'
}
}
}),
}
现在另一种可能性是,在拥有商店实例后更改结束点。如果需要从其他端点加载存储,则可以使用加载方法。
store.load({url:'task/others.json'});
因为在您尝试重新使用商店的情况下,您可以传递整个代理。您的商店(MyApp.store.MyTasks)构造函数应该能够处理新配置并将其应用到商店......以下是一个示例:
constructor: function(config) {
this.initConfig(config);
this.callParent();
}
答案 2 :(得分:0)
使用store.setProxy()
方法。 Link here:
答案 3 :(得分:0)
我有一个BaseStore用于存储默认设置。
Ext.define('ATCOM.store.Shifts', {
extend : 'ATCOM.store.BaseStore',
model : 'ATCOM.model.Shift',
constructor : function(config) {
this.callParent([config]);
this.proxy.api = {
create : 'shifts/create.json',
read : 'shifts/read.json',
update : 'shifts/update.json',
destroy : 'shifts/delete.json',
};
}
});