Изменение текстового поля в детали в зависимости от числового поля.
Друзья, я начинающий разработчик. Прошу помощи в написании кода для детали.
ТЗ: необходимо присваивать категорию клиенту в зависимости от его оборота.
Код работает, но не динамически. Когда добавляю деталь категория пустая. Вношу оборот, сохраняю, потом еще раз захожу в деталь и вот только тогда категория изменяется, после этого сохраняю. Если не сохраню, категория снова будет пустая.
Есть ли возможность сделать изменение категории в детали моментально? Как в любом разделе делается.
Допускаю, что есть непонимание в коде.
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);
},
},
Нравится
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") <= 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);
},
},
SavelyevOll,
Передавать нужно ссылку на функцию которая будет вызываться по изменению поля (в нашем случае this.calcUsrOborotPoLK),
те так: this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK, this);
Те ф-ция init будет такой
init: function() {
this.callParent(arguments);
this.on("change:UsrOborotPoLK", this.calcUsrOborotPoLK, this);
},Пример использования смотрите тут