обработка удаления
удаление записей
Технические вопросы
7.x

Подмена команд удаления своим обработчиком

Не подскажете, как идеологически правильно подменить обработчик удаления записи?
Создан замещающий модуль раздела Контрагенты, нужно выполнить определенную логику при удалении, и возможно отменить удаление.
И с учетом того, что удаление происходит:
- либо после выбора записи и нажатии кнопки Удалить
- либо в режиме выбора нескольких записей и выбора действия Удалить

Нравится

6 комментариев

Валерий, Вам необходимо в замещающем модуле страницы раздела [Контрагенты] переопределить функцию OnDelete.
Пример кода:

var baseOnDelete = this.methods.OnDelete;
this.methods.OnDelete = function() {
 //Ваша проверка
            if (Ext.isFunction(baseOnDelete)) {
                baseOnDelete.call(this);
            }
 
        };

Наталья, не работает...
Вот полный код замещающего модуля: (раздел Лиды, но думаю это не принципиально)

define('LeadSection', ['Lead', 'sandbox', 'LeadSectionStructure', 'LeadSectionResources', 'MaskHelper'],
	function(Lead, sandbox, structure, resources, MaskHelper) {
		structure.userCode = function() {
			// deleting
			var baseOnDelete = this.methods.OnDelete;
			this.methods.OnDelete = function() {
				alert('my check');
				if (Ext.isFunction(baseOnDelete)) {
					baseOnDelete.call(this);
				}
			};
		};
		return structure;
	});

Сообщение не выводится, запись удаляется... Если закомментировать, запись тоже удаляется:

define('LeadSection', ['Lead', 'sandbox', 'LeadSectionStructure', 'LeadSectionResources', 'MaskHelper'],
	function(Lead, sandbox, structure, resources, MaskHelper) {
		structure.userCode = function() {
			// deleting
			var baseOnDelete = this.methods.OnDelete;
			this.methods.OnDelete = function() {
				//alert('my check');
				//if (Ext.isFunction(baseOnDelete)) {
				//	baseOnDelete.call(this);
				//}
			};
		};
		return structure;
	});

Валерий, попробуйте так:

define('LeadSection', ['Lead', 'sandbox', 'LeadSectionStructure', 'LeadSectionResources', 'MaskHelper'],
        function(Lead, sandbox, structure, resources, MaskHelper) {
                structure.userCode = function() {
                        // deleting
			var baseInitViewModel = this.methods.initViewModel;
			this.methods.initViewModel = function() {
			baseInitViewModel.call(this);
			var baseOnDelete = this.onDelete;
			this.onDelete = function() {
                            alert('my check');
			    baseOnDelete.call(this);
			 }
			};
 
                };
                return structure;
        });

Наталия, спасибо, работает!

Но только в режиме выбора одной записи... Если переключиться в режим выбора нескольких записей, пометить их и выбрать действие "Удалить" - этот обработчик не работает.
Как в таком случае быть? Переопределять действие "Удалить", видимо...

Валерий, во втором случае нужно переопределять метод onMultiSelectDelete (this.onMultiSelectDelete).

Спасибо, Наталия, все получилось! :smile:

Показать все комментарии