在 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 不会生成唯一实例的主要内容,如果未能解决你的问题,请参考以下文章