Показать сообщение отдельно
  #1 (permalink)  
Старый 17.12.2015, 17:56
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

TypeError: clientRecords[i] is undefined
Здравствуйте.

У меня возникла ошибка, никак не пойму в чем дело. Итак, есть модель, стор, и код который удаляет из стора записи:
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;
    }
});
Ответить с цитированием