Интерфейс IFocusableTree
Представляет собой дерево фокусируемых элементов с собственным активным/пассивным контекстом фокуса.
Обратите внимание, что фокус обрабатывается FocusManager, а реализации дерева могут иметь максимум один IFocusableNode в фокусе одновременно. Если фокус есть у самого дерева, то сфокусированный узел дерева считается «активным» («пассивным», если фокус есть у другого дерева).
Фокус распределяется между одним или несколькими деревьями, где каждое дерево может иметь ровно один активный или пассивный узел (и только один активный узел может существовать на всей странице в любой момент времени). Идея пассивного фокуса заключается в предоставлении пользователям контекста относительно того, где будет восстановлен их фокус при переходе обратно к ранее сфокусированному дереву.
Обратите внимание: если необходим текущий сфокусированный узел дерева (пассивный или активный), можно использовать FocusableTreeTraverser.findFocusedNode.
Обратите внимание: если необходимо извлечь определенные узлы для этого дерева, используйте lookUpFocusableNode или FocusableTreeTraverser.findFocusableNodeFor.
Подпись:
export interface IFocusableTree
Методы
Метод | Описание |
---|---|
получитьNestedTrees() | Возвращает все непосредственно вложенные деревья под данным деревом. Обратите внимание, что возвращаемый список деревьев не обязательно должен быть стабильным, однако все возвращаемые деревья *должны* быть зарегистрированы в FocusManager. Кроме того, это должно возвращать фактические вложенные деревья, так как пропуск вложенного дерева повлияет на то, как изменения фокуса отображаются на определенном узле и его дереве, что может привести к путанице для пользователя. |
getRestoredFocusableNode(предыдущийУзел) | Возвращает IFocusableNode этого дерева, который должен получить активный фокус, когда фокус возвращается к самому дереву. Есть несколько очень важных замечаний, которые следует учитывать о жизненном цикле фокуса дерева при реализации версии этого метода, которая не возвращает null: 1. Нулевой previousNode не гарантирует первоначального состояния фокуса, так как узлы могут быть удалены. 2. Этот метод используется только тогда, когда само дерево находится в фокусе, либо через навигацию по вкладкам, либо через FocusManager.focusTree(). Во многих случаях ранее сфокусированный узел будет напрямую сфокусирован, что обойдет этот метод. 3. Поведение по умолчанию (т. е. возврат null здесь) подразумевает либо восстановление предыдущего узла (previousNode), либо фокусировку корня дерева. 4. Предоставленный узел иногда может быть недействительным, например, в случае попытки сфокусировать узел, который был недавно удален из родительского дерева. Реализации могут проверять действительность узла, чтобы специализировать узел, на который должен вернуться фокус. Этот метод в значительной степени предназначен для предоставления реализациям деревьев средств указания лучшего узла по умолчанию, чем их корень. |
получитьRootFocusableNode() | Возвращает фокусируемый узел верхнего уровня дерева. Ожидается, что возвращаемый узел будет сфокусирован в тех случаях, когда FocusManager хочет сфокусировать дерево в ситуации, когда в данный момент у него нет сфокусированного узла. |
lookUpFocusableNode(id) | Возвращает IFocusableNode, соответствующий указанному идентификатору элемента, или значение null, если в этом дереве нет точного узла с таким идентификатором или если идентификатор соответствует корню дерева. Это никогда не сравнится с вложенными деревьями. |
onTreeBlur(следующееДерево) | Вызывается, когда ранее активно сфокусированный узел этого дерева теперь пассивно сфокусирован и нет другого активного узла этого дерева, занимающего его место. Здесь действуют те же ограничения и соображения по реализации, что и для onTreeFocus(). |
onTreeFocus(узел, предыдущееДерево) | Вызывается, когда узел этого дерева получает активный фокус. Обратите внимание, что null previousTree не обязательно означает, что это первый раз, когда Blockly получает фокус. Фактически, можно сделать несколько предположений о предыдущем состоянии фокуса, поскольку предыдущее null tree просто указывает на то, что Blockly не удерживал активный фокус до того, как это дерево стало сфокусированным (что может произойти из-за выхода фокуса из инъекции Blockly div или в других случаях, таких как эфемерный фокус). См. IFocusableNode.onNodeFocus(), поскольку реализации имеют те же ограничения, что и этот метод. |