在Ext.data.Store上使用storeId不会创建唯一的实例

时间:2012-07-20 14:24:40

标签: extjs extjs-mvc extjs4.1

我有一个商店APP.store.Posts,我希望实例化3次。它们都将保存相同类型的数据,但在重新加载,分页等时将使用不同的参数。在控制器中,我在onLaunch函数中执行此操作。

onLaunch: function() {

    Ext.create('APP.store.Posts',{
        storeId: 'unclassifiedPosts'
    });
    Ext.create('APP.store.Posts',{
        storeId: 'positivePosts'
    });
    Ext.create('APP.store.Posts',{
        storeId: 'negativePosts'
    });
},

然后,在我在控制器上创建的beforerender侦听器方法中,我这样做:

beforeRenderPostsGrid: function(grid) {
    var store = Ext.getStore('unclassifiedPosts');
    store.load();
},
beforeRenderPositivePostsGrid: function(grid) {        
    var store = Ext.getStore('positivePosts');
    store.getProxy().extraParams = {'some_param' : 'some_value'};
    store.load();
    var checkOtherStore = Ext.getStore('unclassifiedPosts'); //THIS STORE NOW HAS SAME PARAMS AS positivePosts STORE
},

问题是,无论最后一个beforerrender网格被调用,所有3个商店都有这些参数。所以初始加载很好,但如果我做任何刷新,分页等。它们都显示相同的数据b / c每个商店的代理以某种方式具有相同的extraParams。

根据我的理解,storeId参数应该使我的商店与众不同,所以我错过了一步吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我的商店实例唯一的,但由于某种原因,它们每个都有相同的代理。我发现解决这个问题的唯一方法是在创建商店时包含代理配置。但是必须包含完整的代理配置,这是实际的代码:

missingStore = Ext.create('ST.store.Attendance', {
    storeId: 'Missing_Attendance',
    proxy: {
        type: 'ajax', 
        url: 'query',
        extraParams: {
            resource: 'Attendance',
            parameters: '6'
        },
        writer: 'pipe'
    }
}),
partialStore = Ext.create('ST.store.Attendance', {
    storeId: 'Partial_Attendance',
    proxy: {
        type: 'ajax', 
        url: 'query',
        extraParams: {
            resource: 'Attendance',
            parameters: '5'
        },
        writer: 'pipe'
    }
}),
attendedStore = Ext.create('ST.store.Attendance', {
    storeId: 'Attended_Attendance',
    proxy: {
        type: 'ajax', 
        url: 'query',
        extraParams: {
            resource: 'Attendance',
            parameters: '4'
        },
        writer: 'pipe'
    }
}),