Не подскажете, как идеологически правильно подменить обработчик удаления записи?
Создан замещающий модуль раздела Контрагенты, нужно выполнить определенную логику при удалении, и возможно отменить удаление.
И с учетом того, что удаление происходит:
- либо после выбора записи и нажатии кнопки Удалить
- либо в режиме выбора нескольких записей и выбора действия Удалить
Нравится
Валерий, Вам необходимо в замещающем модуле страницы раздела [Контрагенты] переопределить функцию 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).