Не подскажете, как идеологически правильно подменить обработчик удаления записи?
Создан замещающий модуль раздела Контрагенты, нужно выполнить определенную логику при удалении, и возможно отменить удаление.
И с учетом того, что удаление происходит:
- либо после выбора записи и нажатии кнопки Удалить
- либо в режиме выбора нескольких записей и выбора действия Удалить
Нравится
Валерий, Вам необходимо в замещающем модуле страницы раздела [Контрагенты] переопределить функцию OnDelete.
Пример кода:
[javascript]
var baseOnDelete = this.methods.OnDelete;
this.methods.OnDelete = function() {
//Ваша проверка
if (Ext.isFunction(baseOnDelete)) {
baseOnDelete.call(this);
}
};
[/javascript]
Наталья, не работает...
Вот полный код замещающего модуля: (раздел Лиды, но думаю это не принципиально)
[javascript]
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;
});
[/javascript]
Сообщение не выводится, запись удаляется... Если закомментировать, запись тоже удаляется:
[javascript]
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;
});
[/javascript]
Валерий, попробуйте так:
[javascript]
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;
});
[/javascript]
Наталия, спасибо, работает!
Но только в режиме выбора одной записи... Если переключиться в режим выбора нескольких записей, пометить их и выбрать действие "Удалить" - этот обработчик не работает.
Как в таком случае быть? Переопределять действие "Удалить", видимо...
Валерий, во втором случае нужно переопределять метод onMultiSelectDelete (this.onMultiSelectDelete).