В моем приложении у меня есть URN-идентифицированные данные, поступающие с сервера. Я нахожусь в процессе абстрагирования, насколько это возможно, поэтому в моих представлениях практически нет логического кода, и я использую универсальный презентатор, который оборачивает эти представления. Все виджеты имеют URN, что позволяет очень легко сопоставлять входящие данные с определенным виджетом (до сих пор отношение 1 к 1). Это хорошо сработало практически для каждого виджета, и теперь я достиг точки, когда меня запутали.
Предположим, у меня есть (просто для простоты) два RadioButton
элемента в представлении. Эти кнопки относятся к «группе» (просто устанавливая их значения name
в одно и то же), но, очевидно, они представляют собой 2 разных элемента. Я не могу сопоставить свои URN-идентифицированные данные с одним виджетом, как в любом другом случае, потому что, в данном случае, это два виджета.
Вот пример того, что я имею в виду:
Коммунальная компания является ListBox
, так что только один виджет там. Я сопоставляю каждый элемент в списке с определенным значением Enum.
Коэффициент полезности составляет TextBox
, поэтому снова всего один виджет для сопоставления.
Для использования энергии они могут выбрать либо среднее значение за год, либо ввести 12 месячных значений. Я застрял здесь. Я не могу отобразить только один из элементов RadioButton
, потому что тогда мне понадобится дополнительная логика в представлении для правильной обработки поведения.
Прикрепил ли я отображение только одного виджета и придерживаюсь (нежелательной) логики в своем представлении, чтобы определить, какое состояние всех элементов должно быть основано на значении, которое пришло для одного виджета, который равен сопоставлены?
Как мне справиться с этим делом?
Редактировать (решение):
Следуя концепции ответа Джузио, я нашел работоспособное решение. Поскольку я не хотел придерживаться обработки особых случаев в своей логике, чтобы заботиться о не-виджете, я создал RadioButtonSet
поддельный виджет (public class RadioButtonSet <T extends Enum<?> & HasDisplayText> extends Widget implements HasValueChangeHandlers<T>, HasValue<T>
), в который я вручную передаю радиостанции, которые мы собираемся сгруппировать. Сделав это, я могу получить или установить его значение и заставить его запускать соответствующие события, когда пользователь меняет выбор. Тогда сопоставление коллекции радиостанций ничем не отличается от отображения списка. Спасибо, Юсио.