Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Удаление дерева моделей (https://javascript.ru/forum/extjs/63800-udalenie-dereva-modelejj.html)

Infarch 30.06.2016 12:07

Удаление дерева моделей
 
Здравствуйте.

У меня есть древовидная модель, включающая в себя много других моделей. На сервере это реляционная база данных. По архитектуре приложения дочерние ноды не удаляются со стороны клиента, они убиваются на сервере вместе с родителем. И вот когда я с клиента удаляю ноду, то сначала идет запрос на ее удаление, а в догонку еще запросы на удаление деток. Я конечно мог бы на сервере добавить для этого заглушки, но не очень хочется. Предпочел бы чтоб этих дополнительных запросов вообще не посылалось. Не знает ли кто нибудь как это можно настроить?

пс. В целом такое поведение фреймворка кажется несколько странным. Если уж взялись автоматически удалять вложенные модели то логично же сначала именно их удалять, а уже потом родителя. Иначе стандартная схема много-к-одному и наличие внешних ключей сводят все это на нет. Или я не прав?

Infarch 18.07.2016 11:27

Немного покопался в коде экста. Сложилось такое впечатление что мои модели удалялись бы в правильном порядке, если бы я настроил ассоциации. Ладно, начал пробовать. Нашел вот такую статью: http://extjs-tutorials.blogspot.com/...ips-rules.html и сделал у себя ассоциацию по аналогии. Только верхняя модель у меня называется SafetyRound. Однако при удалении этого самого раунда ничего не изменилось, по прежнему сначала удаляется он, а уже потом дети. Что я не так делаю?

Ext.define('SafetyRound.model.entity.SafetyRound', {
	extend: 'Ext.data.TreeModel',
	
	requires: ['SafetyRound.model.entity.SafetyRoundMeasure'],
	
	childType: 'SafetyRound.model.entity.SafetyRoundMeasure',
	
	idProperty: 'ID',
	fields: [
		{ name: 'ID', type: 'int' },
		{ name: 'SafetyRoundProject_ID', type: 'int' }
	],
	
	hasMany:[
		{
			foreignKey: 'SafetyRound_ID',
			associationKey: 'measures',
			name: 'measures',
			model: 'SafetyRound.model.entity.SafetyRoundMeasure'
		}
	],	
	
	proxy: {
		type: 'ajax',
		idParam: 'ID',
		pageParam: '',
		limitParam: '',
		startParam: '',
		reader: {
			type: 'json',
			rootProperty: 'data',
			messageProperty: 'error'
		},
		writer: {type: 'json'},
		api: {
			create: Constants.Server.CONTROLLER + '?cmd=sr.safetyround.create',
			read: Constants.Server.CONTROLLER + '?cmd=sr.safetyround.read',
			update: Constants.Server.CONTROLLER + '?cmd=sr.safetyround.update',
			destroy: Constants.Server.CONTROLLER + '?cmd=sr.safetyround.destroy'
		}
	}

});


Ext.define('SafetyRound.model.entity.SafetyRoundMeasure', {
	extend: 'Ext.data.TreeModel',

	childType: 'SafetyRound.model.entity.SafetyRoundMeasure',

	idProperty: 'ID', // if enabled, breaks correct expand/collapse operations in tree panels :((
	fields: [
		{ name: 'ID', type: 'int' },
		{ name: 'SafetyRound_ID', type: 'int' }
	],
	proxy: {
		type: 'ajax',
		idParam: 'ID',
		pageParam: '',
		limitParam: '',
		startParam: '',
		reader: {
			type: 'json',
			rootProperty: 'data',
			messageProperty: 'error'
		},
		writer: {type: 'json'},
		api: {
			create: Constants.Server.CONTROLLER + '?cmd=sr.measure.create',
			read: Constants.Server.CONTROLLER + '?cmd=sr.measure.read',
			update: Constants.Server.CONTROLLER + '?cmd=sr.measure.update',
			destroy: Constants.Server.CONTROLLER + '?cmd=sr.measure.destroy'
		}
	}

});


Часовой пояс GMT +3, время: 18:05.