ExtJS4存储代理url覆盖
我试图通过改变代理url(实际端点而不是参数)来重用存储。是否可以使用以下语法覆盖存储实例的代理URL:ExtJS4存储代理url覆盖,extjs,extjs4,Extjs,Extjs4,我试图通过改变代理url(实际端点而不是参数)来重用存储。是否可以使用以下语法覆盖存储实例的代理URL: { ...some view config ... store: Ext.create('MyApp.store.MyTasks',{proxy:{url:'task/my.json'}}), } 是否已在存储定义中很好地定义了代理 编辑:抽象存储源代码集 if (Ext.isString(proxy)) { proxy = { type:
{
...some view config ...
store: Ext.create('MyApp.store.MyTasks',{proxy:{url:'task/my.json'}}),
}
是否已在存储定义中很好地定义了代理
编辑:抽象存储源代码集
if (Ext.isString(proxy)) {
proxy = {
type: proxy
};
}
解决方案:store.getProxy().url='task/myMethod.json' 使用
store.setProxy()
方法 创建存储时,不能仅覆盖代理的url。您必须传递一个完整的代理。这是因为,库作为一个整体替换了代理!因此,您可以做的是:
{
...some view config ...
store: Ext.create('MyApp.store.MyTasks',{
proxy: {
type: 'ajax',
url : 'task/my.json',
reader: {
type: 'json',
root: 'rows'
}
}
}),
}
现在,另一种可能性是,在拥有store实例后更改端点。如果需要从其他端点加载存储,可以使用load方法
store.load({url:'task/others.json'});
因为,在您的情况下,您试图重用一个存储,所以您可以传递整个代理。商店的(MyApp.store.MyTasks)构造函数应该能够处理新配置并将其应用于商店。。。以下是一个例子:
constructor: function(config) {
this.initConfig(config);
this.callParent();
}
{
…一些选项卡配置。。。
store:Ext.create('MyApp.store.MyTasks'),
听众:{
afterrender:函数(选项卡){
tab.store.getProxy().url='task/myMethod.json';//我有一个用于存储默认设置的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',
};
}
});
谢谢,但这需要完整的代理配置,我正在寻找对现有代理的覆盖。它也可以是字符串类型。请尝试仅配置要更改的url。Varun,有关使用字符串参数时会发生什么情况,请参阅上面的编辑。谢谢您提供完整的答案。我将其标记为有用。不过,我有一点不同这不是我更喜欢的Saki方法。请参见下面的答案。store.getProxy().url='task/myMethod.json';
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',
};
}
});