在 Ext.data.Store 上使用 storeId 不会生成唯一实例

Posted

技术标签:

【中文标题】在 Ext.data.Store 上使用 storeId 不会生成唯一实例【英文标题】:Using storeId on a Ext.data.Store isn't making unique instances 【发布时间】:2012-07-20 14:24:40 【问题描述】:

我有一个商店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 grid,所有 3 个商店都有这些参数。所以初始加载很好,但如果我进行任何刷新、分页等。它们都显示相同的数据 b/c 每个商店的代理都有相同的 extraParams 不知何故。

据我了解,storeId 参数应该让我的商店独一无二,所以我错过了一步吗?

【问题讨论】:

代理是定义在APP.store.Posts还是它包含的模型上? 代理在模型上定义。不认为这是一个问题,但这是有道理的。 【参考方案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'
    
),

【讨论】:

上面的评论还指出我正在将代理添加到模型中,而不是实际的商店。但如果这是唯一的解决方法,我会接受。 我最初也尝试将代理定义从商店移动到模型,但这对我来说并没有改变任何东西。 这就是我刚刚所做的,它对我有用。感谢您帮助指出 我遇到了同样的问题,但通过将代理配置添加到我的商店定义以及我的模型配置来解决它。创建实例时无需复制它。

以上是关于在 Ext.data.Store 上使用 storeId 不会生成唯一实例的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs之Ext.data.Store

转: Ext.data.Store 修改Post请求

按特定 id 过滤 Ext.data.Store 会返回多个结果

动态添加和删除商店石斑鱼

Ext 修改Store初始化加载完后修改record属性。

如何从 TreeStore Extjs4.1 获取数据