Проблема в перезагрузке магазина. После заказа на стороне сервера в магазин загружаются новые данные, и сетка сбрасывает выбор. В этом случае вы должны сохранить выбранный идентификатор записи (я надеюсь, что вы используете идентификаторы записей на стороне сервера) и после загрузки хранилища повторно выберите строки по идентификаторам записей.
Что-то вроде следующего примера скрипта:
Ext.define('SampleGrid', {
extend: 'Ext.grid.Panel',
title: 'Simpsons',
store: {
fields: ['fieldOne', 'fieldTwo'],
proxy: {
type: 'ajax',
url: 'data.json',
reader: {
type: 'json',
rootProperty: 'root'
}
},
autoLoad: true
},
dockedItems: [{
xtype: 'toolbar',
items: [{
text: "Reload",
handler: function () {
var grid = this.up('grid'),
store = grid.getStore();
store.load();
}
}]
}],
columns: [{
text: 'Field One',
dataIndex: 'fieldOne',
flex: 1
}, {
text: 'Field Two',
dataIndex: 'fieldTwo',
flex: 1
}],
initComponent: function () {
this.callParent();
this.addRememberSelectionFeature();
},
addRememberSelectionFeature: function () {
// Store record id on select
this.on('select', function (grid, selectedRecord) {
this.storedSelectedRecordId = selectedRecord.getId();
}, this);
// Select records after reload
this.getStore().on('load', function (store) {
var lastSelectedRecord = store.getById (this.storedSelectedRecordId);
if (lastSelectedRecord) {
this.getSelectionModel().select(this.storedSelectedRecords);
}
}, this);
}
});
Ext.application({
name: 'Fiddle',
launch: function () {
Ext.create('SampleGrid', {
renderTo: Ext.getBody()
});
}
});
Данные с идентификаторами на стороне сервера (не создаются автоматически с помощью ext js):
{
"root": [{
"id": 0,
"fieldOne": 1,
"fieldTwo": 4
}, {
"id": 1,
"fieldOne": 2,
"fieldTwo": 3
}, {
"id": 2,
"fieldOne": 3,
"fieldTwo": 2
}, {
"id": 3,
"fieldOne": 4,
"fieldTwo": 1
}]
}
Если вы используете модель множественного выбора, необходимо изменить код, просто сохраните идентификаторы выбранных записей в массиве.