Я нашел подходящее решение.Это не самое элегантное решение.Однако это работает.
После копания в коде sencha я обнаружил, что pagingtoolbar и store.indexOfTotal () использовали record.index
(что в моем случае былоустановить, как будто первая страница была загружена).record.index
устанавливается в функции store 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);
},
// ...
});