在extjs中更改控制器中的商店api

时间:2013-03-28 06:41:53

标签: extjs extjs4 extjs4.1 extjs-mvc

以下是我的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中的updateapi值,如下所示:

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(),也会成功更改值,但不会更新或覆盖商店。可能是什么问题?

我参考了以下链接

回答:代码运行正常。让我解释一下我的问题:我在商店里展示容器上的内容,最初,容器里装满了一些内容,高度是固定的。如果我甚至将任何内容添加到容器中,那么当容器具有固定高度时它将被隐藏。到目前为止,内容被附加到默认内容,而不是删除默认内容然后添加。那是实际问题。

1 个答案:

答案 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();