Добрый день,
может кто-то уже сделал эту задачу. У меня есть 3 мультивалютных поля, взял пример BaseOrderPage,и https://academy.terrasoft.ru/documents/technic-sdk/7-16/dobavlenie-multivalyutnogo-polya. Но когда я меняю в одной поле, меняются все 3, но мне надо что бы у каждого поле было свое отдельное валюта.
За ранее спасибо.
Нравится
Тот кто ищет - тот всегда найдет. Решение не мое, а найдено на просторах англоязычного community.
Суть в том, чтобы повторить логику для каждого из полей. Что делаем:
1. Заменяем prepareCurrencyMenu из MultiCurrencyEditUtilities.
prepareCurrencyMenu: function() { this.mixins.MultiCurrencyEditUtilities.prepareCurrencyMenu.call(this); var currencyRateList = this.get("CurrencyRateList"); if (!currencyRateList) { return; } var columnsList = ["NavDamageSize", "NavSumCurrency"]; this.Terrasoft.each(columnsList, function(column) { var menu = this.Ext.create(this.Terrasoft.BaseViewModelCollection); currencyRateList.each(function(item) { var menuItem = Ext.create("Terrasoft.BaseViewModel", { values: { Id: item.value, Caption: item.Symbol || item.displayValue, MarkerValue: item.Symbol || item.displayValue, Tag: item.value, //Click: {"bindTo": "onCurrencyMenuItemClick"} Click: {"bindTo": "on" + column + "CurrencyMenuItemClick"} } }); menu.addItem(menuItem); }, this); //this.set("CurrencyButtonMenuList", menu); this.set(column + "CurrencyButtonMenuList", menu); }, this); },
2. делаем для каждого поля свой "on" + column + "CurrencyMenuItemClick" и column +"CurrencyButtonMenuList"
3. Переопределяем generateCurrencyButton из MultiCurrencyEditViewGenerator. я создал весьб свой класс на основе MultiCurrencyEditViewGenerator
generateCurrencyButton: function(config) { var buttonConfig = { id: "multiCurrencyButton-currency" + config.name, className: "Terrasoft.Button", classes: { wrapperClass: ["currency-button"] }, style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT, menu: { //items: {"bindTo": "CurrencyButtonMenuList"} items: {"bindTo": config.name + "CurrencyButtonMenuList"}// }, enabled: true, markerValue: config.name + " MultiCurrencyButton" }; return this.generateButton(buttonConfig); },
4. Виртуальную колонку Currency и её метод убираем.
Результат:
Плюсы: для каждого поля можно выбрать свою валюты и изменение валюты не затронет другое поля.
Минусы: потеряли треугольник у поля. По каким причинам не могу понять.
Владимир, возможно, вы во всех трёх полях сослались на одно справочное поле валюты, а не отдельные для каждого.
Я так полагаю проблема не в том, что на страницу добавлено одно кастомное поле валюта. Их скорее всего добавлено 3. А в том, что надо создавать виртуальную колонку Currency для совместимости с модулем MultiCurrencyEditUtilities.
Далее при инициализации страницы мы его заполняем.
this.set("Currency", this.get("UsrCurrency"), {silent: true});
А Сама колонка Currency при изменении вызывает метод onVirtualCurrencyChange, который собственно меняет кастомное поле валюта.
onVirtualCurrencyChange: function() { var currency = this.get("Currency"); this.set("UsrCurrency", currency); }
Итого получаем, что для одного Мультивалютного поля все замечательно работает, а если их более одного, то как создавать поле Currency. 2 и более таких полей не создашь.
Сам столкнулся с подобной ситуацией и не понимаю как мне добавить второе мультивалютное поле на страницу.
Тот кто ищет - тот всегда найдет. Решение не мое, а найдено на просторах англоязычного community.
Суть в том, чтобы повторить логику для каждого из полей. Что делаем:
1. Заменяем prepareCurrencyMenu из MultiCurrencyEditUtilities.
prepareCurrencyMenu: function() { this.mixins.MultiCurrencyEditUtilities.prepareCurrencyMenu.call(this); var currencyRateList = this.get("CurrencyRateList"); if (!currencyRateList) { return; } var columnsList = ["NavDamageSize", "NavSumCurrency"]; this.Terrasoft.each(columnsList, function(column) { var menu = this.Ext.create(this.Terrasoft.BaseViewModelCollection); currencyRateList.each(function(item) { var menuItem = Ext.create("Terrasoft.BaseViewModel", { values: { Id: item.value, Caption: item.Symbol || item.displayValue, MarkerValue: item.Symbol || item.displayValue, Tag: item.value, //Click: {"bindTo": "onCurrencyMenuItemClick"} Click: {"bindTo": "on" + column + "CurrencyMenuItemClick"} } }); menu.addItem(menuItem); }, this); //this.set("CurrencyButtonMenuList", menu); this.set(column + "CurrencyButtonMenuList", menu); }, this); },
2. делаем для каждого поля свой "on" + column + "CurrencyMenuItemClick" и column +"CurrencyButtonMenuList"
3. Переопределяем generateCurrencyButton из MultiCurrencyEditViewGenerator. я создал весьб свой класс на основе MultiCurrencyEditViewGenerator
generateCurrencyButton: function(config) { var buttonConfig = { id: "multiCurrencyButton-currency" + config.name, className: "Terrasoft.Button", classes: { wrapperClass: ["currency-button"] }, style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT, menu: { //items: {"bindTo": "CurrencyButtonMenuList"} items: {"bindTo": config.name + "CurrencyButtonMenuList"}// }, enabled: true, markerValue: config.name + " MultiCurrencyButton" }; return this.generateButton(buttonConfig); },
4. Виртуальную колонку Currency и её метод убираем.
Результат:
Плюсы: для каждого поля можно выбрать свою валюты и изменение валюты не затронет другое поля.
Минусы: потеряли треугольник у поля. По каким причинам не могу понять.