В итоге я написал свой собственный FocusManager, который делает то, что мне нужно.Это оказалось проще, чем я думал.Мне жаль говорить, что я не могу опубликовать код здесь, но я дам вам краткое описание того, что я сделал, и надеюсь, что это поможет:
- Я реализовал fl.managers.IFocusManager интерфейс, но я не совсем уважал способ работы старого менеджера
- Конструктор моего CustomFocusManager требует массив дочерних элементов с вкладками в качестве параметра, и дочерние элементы должны бытьв том порядке, в котором они появятся в цикле.Таким образом, мне не нужно было заботиться о типе детей (табуляция или нет?) Или спрашивать себя, существуют ли tabIndexes или нет.
- Я игнорировал свойства tabIndex
- Я создал новый интерфейс с именем IFocusManagerContainer , созданный на основе интерфейса Flex с тем же именем
- Я создал статический класс, похожий на Flex SystemManager, который знает, когда активировать / деактивировать FocusManager в зависимости от детей, найденных на сцене.
Я взглянул на mx.managers.FocusManager , и, как я видел, большая часть их усилий была направлена на обработку всех возможных случаев, когда может использоваться FocusManager, поэтому он такой длинный и сложный.Я могу только предположить, что fl.managers.FocusManagers выглядит аналогично.Могу поспорить, что у меня все еще много проблем, и он не такой переносимый, как у Adobe, но он очень прост и делает то, что мне нужно.
Я все еще хотел бы увидеть некоторые рекомендации о том, как правильно использовать существующий FocusManager.