Обработка нажатия кнопки Отмена на карточке

Есть у меня карточка объекта и в ней есть поле UsrProduct, за которым я слежу.

this.on("change:UsrProduct", function() {this.ProductChanged(); }, this);

Если пользователь меняет поле, у меня вызывается обработчик и он пересчитывает значение в другом поле, которое также сохраняется в БД.
Проблема в том, что если пользователь поменял поле, а затем нажал Отмена, система возвращает все поля в исходное состояние, в том числе UsrProduct, а дальше снова вызывается мой обработчик и пересчитывает другое поле. И вот этого последнего пересчета хотелось бы избежать.

Вопрос - как понять, что вызов происходит после нажатия Отмены???

Нравится

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

попробуйте использовать предоставляемый платформой механизм "зависимости".

attributes:{
...
"UsrProduct": {
	dependencies: [
		{
			columns: ["UsrProduct"],
			methodName: "ProductChanged"
		}
	]
}
...
},

Его реализация предусматривает Ваш и еще несколько кейсов, которые дополнительно придется отрабатывать при прямой подписке на Backbone model property.

Так будет еще хуже. Метод будет вызываться еще и при инициализации страницы.
Нужен какой-то onCancel, есть такой?

Есть onDiscardChangesClick. Который и вызывается при нажатии на Отмена. Можете дополнительно создать атрибут с булевым флагом который будет заполняться в момент вызова onDiscardChangesClick.

"Мотков Илья" написал:

Есть onDiscardChangesClick. Который и вызывается при нажатии на Отмена. Можете дополнительно создать атрибут с булевым флагом который будет заполняться в момент вызова onDiscardChangesClick.


Да, так работает!
Спасибо!

"Алексей Карягин" написал:Метод будет вызываться еще и при инициализации страницы.

по какой причине он будет вызываться при ИНИЦИАЛИЗАЦИИ страницы ?
не должен и не вызывается :)
"Алексей Карягин" написал:Нужен какой-то onCancel, есть такой?

есть у BasePageV2 метод onCardAction

...
				onCardAction: function() {
					var action = arguments[0] || arguments[3];
					this[action]();
				},
...

через него проходит обработка вызова "действий карточки", если они не вызываются напрямую н/п

this.save()

он завязан в механике обработки тегов по нажатию на кнопках "Закрыть", "Отмена", "Сохранить".
Я думаю это то что Вам нужно.

PS:
через него кстати и вызов вышеупомянутого onDiscardChangesClick происходит

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