Interfaz IFocusableTree
Representa un árbol de elementos enfocables con su propio contexto de enfoque activo o pasivo.
Ten en cuenta que FocusManager controla el enfoque, y las implementaciones de árbol pueden tener como máximo un IFocusableNode enfocado a la vez. Si el árbol está enfocado, el nodo enfocado del árbol se considera "activo" ("pasivo" si otro árbol está enfocado).
El enfoque se comparte entre uno o más árboles, en los que cada árbol puede tener exactamente un nodo activo o pasivo (y solo puede existir un nodo activo en toda la página en un momento determinado). La idea del enfoque pasivo es proporcionar contexto a los usuarios sobre dónde se restablecerá su enfoque cuando vuelvan a navegar a un árbol enfocado anteriormente.
Ten en cuenta que, si se necesita el nodo enfocado actual del árbol (pasivo o activo), se puede usar FocusableTreeTraverser.findFocusedNode.
Ten en cuenta que, si se necesitan recuperar nodos específicos para este árbol, usa lookUpFocusableNode o FocusableTreeTraverser.findFocusableNodeFor.
Signature:
export interface IFocusableTree
Métodos
Método | Descripción |
---|---|
getNestedTrees() | Muestra todos los árboles anidados directamente en este árbol. Ten en cuenta que la lista de árboles que se muestra no tiene que ser estable. Sin embargo, todos los árboles que se muestran *sí* deben registrarse en FocusManager. Además, esto debe mostrar árboles anidados reales, ya que omitir un árbol anidado afectará la forma en que los cambios de enfoque se asignan a un nodo específico y su árbol, lo que podría generar confusión en el usuario. |
getRestoredFocusableNode(previousNode) | Devuelve el IFocusableNode de este árbol que debe recibir el enfoque activo cuando el árbol mismo vuelve a tener el enfoque. Hay algunas notas muy importantes que debes tener en cuenta sobre el ciclo de vida del enfoque de un árbol cuando implementes una versión de este método que no devuelve un valor nulo: 1. Un previousNode nulo no garantiza el estado de enfoque por primera vez, ya que los nodos se pueden borrar. 2. Este método solo se usa cuando el árbol está enfocado, ya sea a través de la navegación de pestañas o mediante FocusManager.focusTree(). En muchos casos, el nodo enfocado anteriormente se enfocará directamente, lo que omitirá este método. 3. El comportamiento predeterminado (es decir, mostrar nulo aquí) implica restablecer el nodo anterior (previousNode) o enfocar la raíz del árbol. 4. A veces, es posible que el nodo proporcionado ya no sea válido, como en el caso de que se intente enfocar un nodo que se quitó recientemente de su árbol superior. Las implementaciones pueden verificar la validez del nodo para especializar el nodo al que debe recurrir el enfoque. El objetivo principal de este método es proporcionar a las implementaciones de árboles los medios para especificar un nodo predeterminado mejor que su raíz. |
getRootFocusableNode() | Muestra el nodo enfocado de nivel superior del árbol. Se espera que el nodo que se muestra esté enfocado en los casos en que FocusManager quiera enfocar un árbol en una situación en la que no tiene un nodo enfocado. |
lookUpFocusableNode(id) | Muestra el IFocusableNode que corresponde al ID del elemento especificado, o nulo si no hay un nodo exacto dentro de este árbol con ese ID o si el ID corresponde a la raíz del árbol. Esto nunca coincidirá con árboles anidados. |
onTreeBlur(nextTree) | Se llama cuando el nodo enfocado de forma activa de este árbol ahora está enfocado de forma pasiva y no hay otro nodo activo de este árbol que lo reemplace. Tiene las mismas restricciones y consideraciones de implementación que onTreeFocus(). |
onTreeFocus(node, previousTree) | Se llama cuando un nodo de este árbol recibe el enfoque activo. Ten en cuenta que un previousTree nulo no indica necesariamente que esta es la primera vez que Blockly recibe el enfoque. De hecho, se pueden hacer pocas suposiciones sobre el estado de enfoque anterior, ya que un árbol nulo anterior simplemente indica que Blockly no mantuvo el enfoque activo antes de que este árbol se enfocara (lo que puede suceder debido a que el enfoque sale del div de inserción de Blockly o en otros casos, como el enfoque efímero). Consulta IFocusableNode.onNodeFocus(), ya que las implementaciones tienen las mismas restricciones que con ese método. |