Технические вопросы
7.x

Отмена изменений

Всем доброго времени суток.

Версия 7.9 sales.

На странице есть кнопка Отмена (см. скриншот). Необходимо добавить событие на эту кнопку. Событие связано с изменениями данных на странице и пересчётами параметров, но дело не в нём.

onDiscardChangesClick: function(){
        this.callParent(arguments);
        console.log("Событие");
}

Такой вариант не помогает - нужное событие происходит раньше, чем отмена изменений (оно должно происходить сразу после).

Соответственно, вопрос - как правильно сделать? Какая функция должна быть переопределена, или быть может, есть sandbox-сообщение, на которое можно подписаться и вызывать через него требуемое событие?

Нравится

3 комментария

[javascript]
onDiscardChangesClick: function() {
if (this.isNew) {
this.sandbox.publish("BackHistoryState");
return;
}
this.set("IsEntityInitialized", false);
this.loadEntity(this.getPrimaryColumnValue(), function() {
this.updateButtonsVisibility(false, {
force: true
});
this.initMultiLookup();
this.set("IsEntityInitialized", true);
this.discardDetailChange();
this.updatePageHeaderCaption();
}, this);
if (this.get("ForceUpdate")) {
this.set("ForceUpdate", false);
}
},
[/javascript]
Кажется мне, что в сферическом вакууме перезагрузка entity выглядит как-то так: [javascript]
this.loadEntity(recordId, callback, scope)
[/javascript]Ну и поскольку она асинхронна, попробуйте добавить console.log после, допустим, this.updatePageHeaderCaption()

Здравствуйте, Денис.

Предыдущий комментатор верно подметил. Для замещения, Вам необходимо переписать метод onDiscardChangesClick целиком (вызова this.callParent(arguments) будет недостаточно) и добавить свой код в коллбэк функцию из метода loadEntity.

Также, при необходимости, можете посмотреть в сторону использования js функции setTimeout для отложенного вызова кода.

Илья, Данила - спасибо!

Вроде как задача решена.

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