При добавлении зависимости следующим образом:

"RoundPropertyPriceWithDiscount": {
    dependencies: [
        {
             columns: ["PropertyPriceWithDiscount"],
             methodName: "roundPropertyPriceWithDiscount"
        }
    ]
}

и обработки методом:

roundPropertyPriceWithDiscount: function() {
	this.roundDoubleValue("PropertyPriceWithDiscount");
},
roundDoubleValue: function(propertyName) {
	var value = this.get(propertyName);
	var rounded = Math.round(value);
 
	if (rounded != value) {
		this.set(propertyName, rounded);
	}
},

происходит зацикливание. Кейс:

вводим в поле 5,56 - запускается метод, записывающий в поле 6,00, далее запускается еще раз (очевидно), проверяет что значение в поле равно его округленному значению (6,00 == 6,00) и значение в поле НЕ ПЕРЕЗАПИСЫВАЕТ. И вот далее идет ТРЕТИЙ запуск, в котором this.get() возвращает старое значение поля - 5,56. Ну и, естественно, это бесконечный цикл. Каким образом работает сей механизм? Если мне не изменяет память - в прошлых версиях такого не было.

7.13.1.769_SalesEnterprise_Softkey_MSSQL_ENU

 

UPD: Подписка на изменение поля вручную решает вопрос

this.on("change:PropertyPriceWithDiscount", this.roundPropertyPriceWithDiscount, this);

 

Нравится

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

Добрый день!

Если я правильно понял Ваш бизнес-кейс, то вы его неправильно реализовали. Если при изменении одного поля нужно взять значение этого поля, округлить его и записать в другое поле, то вам нужно делать this.set("RoundPropertyPriceWithDiscount", value);

Тёскин Дмитрий Валерьевич,

Нет, я все правильно написал. Округление значения в том же самом поле. 

RoundPropertyPriceWithDiscount это просто название атрибута

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