первый подход
принципы - никакого JS,HTML,etc на фронте. Только компиляция в режиме dev/prod
Перем ВебПриложение;
Функция ФункцияПересчетаИндексаВеса()
ФормулаИндексаВеса = Формулы.Умножить("ИндексРоста","ИндексРоста").Разделить("ЗначениеВес");
ФормулаРоста = Формулы.Умножить("ИндексРоста","ИндексРоста").Умножить("ЗначениеИндексаВеса");
ФункцияПересчета = ОпределительПоведения.ДляДанных("ЗначениеРост, ЗначениеВес, ЗначениеИндексаВеса")
.ПрименитьФормулу("ЗначениеРост", Формулы.Разделить("ЗначениеРост",100))
.СохранитьРезультат("ИндексРоста")
.ЕслиСуществует("ЗначениеИндексаВеса")
.ПрименитьФормулу("ЗначениеИндексаВеса", ФормулаИндексаВеса)
.ПрименитьФормулу("ЗначениеВес", ФормулаРоста);
ПоведениеФормы = ОпределительПоведения.Пусть()
.ПриИзмененииДанных("ЗначениеРост, ЗначениеВес, ЗначениеИндексаВеса")
.ВызываетсяФункция(ФункцияПересчета);
Возврат ПоведениеФормы;
КонецФункции
ВебПриложение = Новый ВебПриложение();
ВебПриложение.ДанныеПриложения.ДобавитьНаКлиенте(
Новый Структура("ЗначениеРост, ЗначениеВес",180,80)
);
ПанельЭлементов = ЭлементыФорм.ЭлементПанель();
ДинамическийЗаголовок = ЭлементыФорм.ЭлементДекорация();
ИзменениеЦветаИТекста = ОпределительПоведения.ДляДанных("ЗначениеИндексаВеса").Условие()
.ЕслиМеньше(18.5).ТогдаВернуть(Цвета.Оранжевый, "Недостаточный")
.ЕслиМеньше(25).ТогдаВернуть(Цвета.Основной,"Нормальный")
.ЕслиМеньше(30).ТогдаВернуть(Цвета.Оранжевый,"Избыточный")
.ПоУмолчанию(Цвета.Красный,"Беда случилась - иди к доктору");
ДинамическийЗаголовок.Изменять("Цвет,Текст", ИзменениеЦветаИТекста);
ПанельЭлементов
.ДобавитьДочерний(ЭлементыФорм.ЭлементЗаголовок("Калькулятор индекса веса"))
.ДобавитьДочерний(ЭлементыФорм.ЭлементРегулятор("Рост: %i см", "ЗначениеРост",100,200))
.ДобавитьДочерний(ЭлементыФорм.ЭлементРегулятор("Вес: %i кг", "ЗначениеВес",30,150))
.ДобавитьДочерний(ДинамическийЗаголовок)
.ДобавитьДочерний(ЭлементыФорм.ЭлементРегулятор("Индекс веса тела: %i", "ЗначениеИндексаВеса",10,50));
ПанельЭлементов.ДобавитьПоведение("ПересчётИндексаВеса", ФункцияПересчетаИндексаВеса());
ВебПриложение.ОбщиеКомпоненты.ДобавитьКомпонент(ПанельЭлементов);
НастройкиВебПроекта.Идентификатор = "bmi-calc";
КомпилированноеПриложение = ВебПриложение.СкомпилироватьСНастройками("build/bmi-calc", НастройкиВебПроекта);
@EvilBeaver нужно понять читаемость такого кода - обрати внимание: функции поведения приходится писать прям с нуля в виде текучих утверждений/условий. Насколько это правильно…
Сюда же