Вопрос

Изменение текстового поля в детали в зависимости от числового поля.

Друзья, я начинающий разработчик. Прошу помощи в написании кода для детали.

ТЗ: необходимо присваивать категорию клиенту в зависимости от его оборота.

Код работает, но не динамически. Когда добавляю деталь категория пустая. Вношу оборот, сохраняю, потом еще раз захожу в деталь и вот только тогда категория изменяется, после этого сохраняю. Если не сохраню, категория снова будет пустая.



Есть ли возможность сделать изменение категории в детали моментально? Как в любом разделе делается. 

Допускаю, что есть непонимание в коде. 

define("UsrUsrPribilPoKvortalam1Page", [], function() {
	return {
		entitySchemaName: "UsrPribilPoKvortalam",
		attributes: {
			"UsrOborotPoLK": {
				dataValueType: Terrasoft.DataValueType.FLOAT,
				dependencies: [
				{
						columns: ["UsrOborot1"],
						methodName: "calcUsrOborotPoLK"
					}
				]
			},
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			onEntityInitialized: function() {
				this.callParent(arguments);
				this.calcUsrOborotPoLK();
					},
					calcUsrOborotPoLK: function() {
					var slovo = this.get("UsrKategoriyaKlienta");
							if (this.get("UsrOborotPoLK") <= 30) {
								slovo = "до 30";
							}else if (this.get("UsrOborotPoLK") <= 50 && this.get("UsrOborotPoLK") > 30){
								slovo = "до 50";
							}else if (this.get("UsrOborotPoLK") <= 70 && this.get("UsrOborotPoLK") > 50){
								slovo = "до 70";
							}else if (this.get("UsrOborotPoLK") <= 100 && this.get("UsrOborotPoLK") > 70){
								slovo = "*";
							}else if (this.get("UsrOborotPoLK") <= 200 && this.get("UsrOborotPoLK") > 100){
								slovo = "**";	
							}else if (this.get("UsrOborotPoLK") <= 500 && this.get("UsrOborotPoLK") > 200){
								slovo = "***";
							}else if (this.get("UsrOborotPoLK") <= 1000 && this.get("UsrOborotPoLK") > 500){
								slovo = "****";
							}else if (this.get("UsrOborotPoLK") > 1000){
								slovo = "*****";
							}
					this.set("UsrKategoriyaKlienta", slovo);
					},
				},



 

Нравится

4 комментария
Лучший ответ

SavelyevOll,

Передавать нужно ссылку на функцию которая будет вызываться по изменению поля (в нашем случае this.calcUsrOborotPoLK),
те так: this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK, this); 

Те ф-ция init будет такой
init: function() {
this.callParent(arguments);
this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK, this);
},

Пример использования смотрите тут

Метод onEntityInitialized срабатывает только при загрузке детали, если я правильно понял, то вам нужно что бы по изменению оборота вычислялась категория. Тогда попробуйте использовать следующий код:

init: function() {
	this.callParent(arguments);
	this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK(), this);
}

 

Григорий Чех,

Спасибо! Я исправил код, но теперь даже после сохранения не происходит вычислений. Допускаю, что ошибка в вызове функции. Все ли здесь верно?

 
init: function() {
this.callParent(arguments);
this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK(), this);
	},
	calcUsrOborotPoLK: function(){
	var slovo = this.get("UsrKategoriyaKlienta");
	if (this.get("UsrOborotPoLK") &lt;= 30) {
		slovo = "до 30";
	}else if (this.get("UsrOborotPoLK") &lt;= 50 &amp;&amp; this.get("UsrOborotPoLK") &gt; 30){
		slovo = "до 50";
	}else if (this.get("UsrOborotPoLK") &lt;= 70 &amp;&amp; this.get("UsrOborotPoLK") &gt; 50){
		slovo = "до 70";
	}else if (this.get("UsrOborotPoLK") &lt;= 100 &amp;&amp; this.get("UsrOborotPoLK") &gt; 70){
		slovo = "*";
	}else if (this.get("UsrOborotPoLK") &lt;= 200 &amp;&amp; this.get("UsrOborotPoLK") &gt; 100){
		slovo = "**";	
	}else if (this.get("UsrOborotPoLK") &lt;= 500 &amp;&amp; this.get("UsrOborotPoLK") &gt; 200){
		slovo = "***";
	}else if (this.get("UsrOborotPoLK") &lt;= 1000 &amp;&amp; this.get("UsrOborotPoLK") &gt; 500){
		slovo = "****";
	}else if (this.get("UsrOborotPoLK") &gt; 1000){
		slovo = "*****";
	}
	this.set("UsrKategoriyaKlienta", slovo);
		},
		},

 

SavelyevOll,

Передавать нужно ссылку на функцию которая будет вызываться по изменению поля (в нашем случае this.calcUsrOborotPoLK),
те так: this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK, this); 

Те ф-ция init будет такой
init: function() {
this.callParent(arguments);
this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK, this);
},

Пример использования смотрите тут

Григорий Чех,

Спасибо большое! Все работает)

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