我有一个绑定到网格的商店。加载时它有n页。
现在我想显示包含特定值的页面。为了做到这一点,我使用store.load({params: {'file': 'file33939'}});
(使用'文件',因为网格显示文件列表,但它与问题无关)。此刻我不知道应该是什么页面。回复如下:
{
"files":[{"id":"33939", "name": "file33939"}, /* ... */],
"total": 1000,
"page": 13
}
网格显示正确的数据(真正包含'file33939'的页面)。但是, pagingtoolbar ,网格的rownumberer 和 store.indexOfTotal()的行为就像加载了第一页(而不是13)一样。
如何“告诉”商店刚刚加载的页面是13?
答案 0 :(得分:2)
要更改已加载的页面,请不要使用store.load()
。您应该找到一种方法来获取给定数据的页码(例如,通过ajax请求询问服务器),然后通过pagingtoolbar.move(pageNumber)
更新页面。这将更新您的pagingtoolbar以及网格和商店,一切都保持同步。
答案 1 :(得分:0)
我找到了合适的解决方案。这不是最优雅的解决方案。无论如何。
在深入查询代码后,我发现 pagingtoolbar 和 store.indexOfTotal()正在使用record.index
(在我的情况下设置为第一页已加载)。 record.index
由函数store.loadRecords
中的商店设置:
loadRecords: function(records, options) {
// ...
//FIXME: this is not a good solution. Ed Spencer is totally responsible for this and should be forced to fix it immediately.
for (; i < length; i++) {
if (options.start !== undefined) {
records[i].index = options.start + i;
}
// ...
},
FIXME评论不是我的。它在代码中。
理想的解决方案是在响应来之后和调用loadRecords之前找到一个被触发的事件,并在处理程序中覆盖options
。但是我没有找到这样的事件。
但是你总是可以覆盖loadRecords:
Ext.define('MyApp.store.MyStore', {
extend : 'Ext.data.Store',
// ...
loadRecords : function(records, options) {
if (this.proxy.reader.rawData.page) {
var page = this.proxy.reader.rawData.page;
// This is for pagingtoolbar
this.currentPage = page;
// The following is for rownumberer and correct index behaviour
options.page = page;
options.start = (page-1)*options.limit;
}
this.callParent(arguments);
},
// ...
});