Вопрос

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

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

Версия 7.9 sales.

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

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

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

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

У меня такой же вопрос

3 комментария
Варфоломеев Данила
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);
	}
},

Кажется мне, что в сферическом вакууме перезагрузка entity выглядит как-то так:

this.loadEntity(recordId, callback, scope)

Ну и поскольку она асинхронна, попробуйте добавить console.log после, допустим, this.updatePageHeaderCaption()

Мотков Илья

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

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

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

Смородинов Денис

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

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

Войдите или зарегистрируйтесь, чтобы комментировать