以下是我的MyStore.js
:
Ext.define('MyApp.store.MyStore', {
extend: 'Ext.data.Store',
model: 'MyApp.model.Note',
autoLoad: true,
proxy: {
type: 'ajax',
api: {
/* I want to change the following two filepaths */
read: 'data/notesMar2013.json',
update: 'data/notesMar2013.json'
},
reader: {
type: 'json',
root: 'data',
successProperty: 'success'
}
}
});
我正在尝试通过控制器更改MyStore的read
中的update
和api
值,如下所示:
var notesStore = Ext.getStore('MyStore');
notesStore.on('load',function(notesStore){
var proxy = notesStore.getProxy();
Ext.apply(proxy.api,{
/* Changing the file paths here */
read: 'data/notesApr2013.json',
update: 'data/notesApr2013.json'
})
notesStore.load();
},this,{single:false});
//
console.log(notesStore);
通过使用上述功能,我正在尝试更新MyStore,但它没有发生。当我签入chrome控制台时,即使我使用notesStore.load()
,也会成功更改值,但不会更新或覆盖商店。可能是什么问题?
我参考了以下链接
回答:代码运行正常。让我解释一下我的问题:我在商店里展示容器上的内容,最初,容器里装满了一些内容,高度是固定的。如果我甚至将任何内容添加到容器中,那么当容器具有固定高度时它将被隐藏。到目前为止,内容被附加到默认内容,而不是删除默认内容然后添加。那是实际问题。
答案 0 :(得分:2)
这应该没有任何问题,因此你在任何其他方面都有错误。请在 JSFiddle 中查看控制台。在这里是我使用的测试代码
Ext.define('MyApp.model.Note',{extend:'Ext.data.Model'});
Ext.define('MyApp.store.MyStore', {
extend: 'Ext.data.Store',
model: 'MyApp.model.Note',
proxy: {
type: 'ajax',
getUrl: function(request) {
console.log('fetched request url');
console.log(this.api[request.action]);
return request.url || this.api[request.action] || this.url;
},
api: {
/* I want to change the following two filepaths */
read: 'data/notesMar2013.json',
update: 'data/notesMar2013.json'
},
reader: {
type: 'json',
root: 'data',
successProperty: 'success'
}
}
});
var store = Ext.create('MyApp.store.MyStore');
console.log('The origin API');
console.log(store.getProxy().api);
store.load();
var proxy = store.getProxy();
var newApi = {read: 'data/2013.json', update: 'data/2013.json' };
Ext.apply(proxy.api,newApi);
console.log('The changed API');
console.log(store.getProxy().api);
store.load();