Изменение текстового поля в детали в зависимости от числового поля.
Друзья, я начинающий разработчик. Прошу помощи в написании кода для детали.
ТЗ: необходимо присваивать категорию клиенту в зависимости от его оборота.
Код работает, но не динамически. Когда добавляю деталь категория пустая. Вношу оборот, сохраняю, потом еще раз захожу в деталь и вот только тогда категория изменяется, после этого сохраняю. Если не сохраню, категория снова будет пустая.
Есть ли возможность сделать изменение категории в детали моментально? Как в любом разделе делается.
Допускаю, что есть непонимание в коде.
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); },
Пример использования смотрите тут