Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Подарки от программис'тов

19.08.22 17:44
Re: Подарки от программис'тов
 
alex445 коренной житель
в ответ AlexNek 18.08.22 12:39, Последний раз изменено 19.08.22 17:55 (alex445)
Ну и так мне кажется всё понятно: у объекта можно опросить фокус и установить фокус, забрать фокус снаружи нельзя (только изнутри). Я никак не догоняю, что здесь необычного.

По определению, в фокусе может быть лишь один объект. Вы можете снаружи установить фокус, но не забрать. Но сама установка получается, что забирает фокус. Получается, фокус можно забрать и снаружи - установкой фокуса на другой элемент. В чём смысл тогда делить геттер/сеттер на геттер и метод-сеттер, играясь в разделение ответственностей, которого (разделения) нет?


Я уже не говорю о том, что объект, у которого до этого был фокус, должен как-то узнать снаружи, что фокус теперь у другого объекта, и ему нужно снять с себя фокус. Т.е. зачем-то всё усложнили, передав управление высокого уровня (установка фокуса на элементе управления в форме) на низкий уровень - на сами элементы управления. Только они теперь должны быть все связаны, чтобы знать о своих состояниях и снимать с себя фокусы. Нахрена это делать, если управлять фокусом должна сама форма, которая и должна снимать фокусы с других элементов, если фокус переместился.


Та же байда, кстати, в этом приложении с правами доступа и контролем состояния элементов управления - элемент должен сам себя проверять, есть ли у пользователя доступ к нему и какие права редактирования. Т.е. в каждом элементарном значении (и контроле, к которому это значение привязано) хранится эта информация, и контрол сам себе меняет состояние. Я вот только не пойму, как сделать ИЗНУТРИ КОНТРОЛА, чтобы он не показывался, если у пользователя нет доступа к нему? Если бы сама форма решала - тут просто - не рисуешь этот контрол и всё. А тут вот есть HTML элемент <input>, и ты либо не рисуешь его, либо используешь его атрибут disabled. Но всё это делается на уровне формы, а не внутри самого элемента. Получается, нужно делать кастомный input, где всю разметку запихать в условный оператор - типа if (hasAccess). Абсолютно идиотское и костыльное решение.

 

Перейти на