Модел за радио бутони, като всеки избира набор от други контроли?

Забелязах често срещан сценарий в разработването на потребителски интерфейс (както уеб, така и дебел клиент), където има група радио бутони и щракването върху радио бутон означава, че искате да „изберете“ определен „набор“ от други контроли (за по-голяма простота , да кажем, че всички те са текстови полета).

Само за илюстрация, звездичките представляват радио бутони, а долните черти представляват текстови полета. Всеки бутон за избор трябва да "избере" "набора" от текстови полета на същия ред.

*   ________   ________  __________

*   ________

*   ________   ________

Така преведено в изискванията на потребителския интерфейс, това означава

  1. Всеки път, когато потребителят щракне върху бутон за избор, всички стойности в текстовите полета не в неговия „набор“ трябва да бъдат изтрити и

  2. Всеки път, когато потребителят започне да въвежда в текстово поле, радиобутонът, който го контролира, трябва да бъде избран автоматично (което също предполага изтриване на други стойности на текстово поле, както по-горе).

Проблемът за мен е, че правилното програмиране на това е изненадващо трудно. Има много събития за обработка и манипулаторите могат да причинят други събития да се задействат и т.н.

Има ли някакъв "модел" за това, който може да се следва?


person JoelFan    schedule 09.12.2009    source източник


Отговори (3)


Всъщност, от гледна точка на използваемостта бих препоръчал да не изтривате стойностите в текстовите полета, когато бутонът за избор е немаркиран. Когато даден потребител превключва между радио бутони, не трябва да унищожавате работата му. Като не изчисти текстовите полета, потребителят може да се върне към използване на Опция А след Опция Б, без да се налага повторно въвеждане на стойностите на текстовото поле.

Може да искате да деактивирате текстовите полета, когато свързаният бутон за избор не е маркиран, за да укажете на потребителите си, че стойностите на текстовото поле не са приложими. Вероятно трябва също така да настроите избирането на радиобутон автоматично да постави фокуса в първото свързано текстово поле, за да спестите на потребителя допълнително щракване с мишката или натискане на клавиш tab. В повечето случаи това ще бъде толкова ефективно, колкото потребителят да щракне върху желано текстово поле във вашия оригинален дизайн.

Този дизайн също така опростява вашия код. Всичко, от което се нуждаете, е да зададете активирането и фокуса в събитието Актуализация за радио бутоните.

person Michael Zuschlag    schedule 11.12.2009

Има много събития за обработка

Малка йерархия от контролери може да помогне. Контролери на редове, отговорни за обработката на събития от уиджети в един ред и избора/отмяната на избора на определен ред. Контролер за набор от редове, отговорен за предаването на известия за „друг избран ред“ към редовете в набора.

Човек може да нарече това йерархичен MVC (ето ви, модел :-) ), въпреки че това име ми звучи твърде тежко, за да опиша горното.

и манипулаторите могат да предизвикат задействане на други събития и т.н.

Изглежда, че задачата на контролерите за редове е да потискат вторични събития, задействани при избиране/отмяна на избор на ред. Контролерът на ред знае дали се изпълнява избор/отмяна на избор и по този начин може да намали вторичните събития. Не съм сигурен дали това е модел за това. Може би модел на булев флаг, който да показва, че се извършва селекция :-)

person Rafał Dowgird    schedule 11.12.2009

Можете да използвате модела на потребителския интерфейс „Подформуляр“ и свързаните с него модели (алтернативен подформуляр, избор на подформуляр и т.н.)

Можете да прочетете обяснение на тези модели тук.

person andrepf    schedule 11.12.2009