Здравствуйте.
У меня возникла ошибка, никак не пойму в чем дело. Итак, есть модель, стор, и код который удаляет из стора записи:
Ext.define('SafetyRound.model.entity.SafetyRoundMeasurePoint', {
extend: 'Ext.data.Model',
idProperty: 'ID',
fields: [
{ name: 'ID', type: 'int' },
{ name: 'SafetyRoundProject_ID', type: 'int' },
{ name: 'SafetyRoundMeasurePoint_ID', type: 'int', allowNull: true },
{ name: 'OrderNumber', type: 'int' },
{ name: 'Active', type: 'boolean' },
'Name'
],
proxy: {
type: 'ajax',
idParam: 'ID',
pageParam: '',
limitParam: '',
startParam: '',
reader: {
type: 'json',
rootProperty: 'data',
messageProperty: 'error'
},
writer: {
type: 'json'
},
api: {
create: '/json?cmd=sr.measurepoint.create',
read: '/json?cmd=sr.measurepoint.read',
update: '/json?cmd=sr.measurepoint.update',
destroy: '/json?cmd=sr.measurepoint.destroy'
}
}
});
Ext.define('SafetyRound.store.entity.MeasurePoint', {
extend: 'SafetyRound.store.InsistentStore',
requires: ['SafetyRound.model.entity.SafetyRoundMeasurePoint'],
model: 'SafetyRound.model.entity.SafetyRoundMeasurePoint',
autoLoad: false,
storeId: 'measurePointsAll',
autoSync: true
});
// и код
deleteMeasurePoint: function(record){
var
store = record.store,
rec_id = record.get('ID'),
children = store.query('SafetyRoundMeasurePoint_ID', rec_id),
i = 0;
store.beginUpdate();
children.each(function(item){
store.remove(item);
});
store.remove(record);
store.each(function(item){
item.set('OrderNumber', i++);
});
store.endUpdate();
}
Как видите, иногда удаляются записи у которых есть дочерние элементы. Тогда я и их удаляю из стора, а он синхронизирует изменения с сервером. Так вот когда удаляется более одной записи то команда на удаление проходит, апдейты тоже проходят, грид отображает изменения стора, но в консоли ошибка
TypeError: clientRecords[i] is undefined.
В другом месте приложения есть очень похожий код, с другим стором и моделями. Так вот там у стора autosync=false, а синхронизирую я его через прямой вызов метода sync. Опять таки, если записей больше одной то вылезает эта ошибка и sync не вызывает хендлер success, а это уже гораздо печальнее. Серверный запрос сработать успевает, корректно передает json.
Что не так???
зы: ошибка вылезает вот тут (ext-all-rtl-debug.js):
Ext.define('Ext.data.operation.Destroy', {
extend: 'Ext.data.operation.Operation',
alias: 'data.operation.destroy',
action: 'destroy',
isDestroyOperation: true,
order: 30,
foreignKeyDirection: -1,
doProcess: function()
{
var clientRecords = this.getRecords(),
clientLen = clientRecords.length,
i;
for (i = 0; i < clientLen; ++i) {
clientRecords[i].setErased(); // <----------------------
}
},
doExecute: function() {
return this.getProxy().erase(this);
},
getRecordData: function(record, operation) {
var data = {},
idField = record.idField,
nameProperty = this.getNameProperty() || 'name';
data[idField[nameProperty]] = record.id;
return data;
}
});