Schnittstelle „IFocusableTree“
Stellt einen Baum aus fokussierbaren Elementen mit eigenem aktiven/passiven Fokuskontext dar.
Der Fokus wird vom FocusManager verwaltet. Bei Baumimplementierungen kann jeweils nur ein IFocusableNode den Fokus haben. Wenn der Fokus auf dem Baum selbst liegt, wird der fokussierte Knoten des Baums als „aktiv“ betrachtet (als „passiv“, wenn der Fokus auf einem anderen Baum liegt).
Der Fokus wird zwischen einem oder mehreren Bäumen geteilt. Dabei kann jeder Baum genau einen aktiven oder passiven Knoten haben. Auf der gesamten Seite kann immer nur ein aktiver Knoten vorhanden sein. Der passive Fokus soll Nutzern Kontext darüber geben, wo ihr Fokus wiederhergestellt wird, wenn sie zu einem zuvor fokussierten Baum zurückkehren.
Wenn der aktuelle fokussierte Knoten des Baums (passiv oder aktiv) benötigt wird, kann FocusableTreeTraverser.findFocusedNode verwendet werden.
Wenn für diesen Baum bestimmte Knoten abgerufen werden müssen, verwenden Sie entweder lookUpFocusableNode oder FocusableTreeTraverser.findFocusableNodeFor.
Unterschrift:
export interface IFocusableTree
Methoden
Method | Beschreibung |
---|---|
getNestedTrees() | Gibt alle direkt verschachtelten Bäume unter diesem Baum zurück. Die zurückgegebene Liste der Bäume muss nicht stabil sein. Alle zurückgegebenen Bäume müssen jedoch beim FocusManager registriert sein. Außerdem müssen tatsächlich verschachtelte Bäume zurückgegeben werden, da das Auslassen eines verschachtelten Baums sich darauf auswirkt, wie sich Fokusänderungen auf einen bestimmten Knoten und seinen Baum auswirken, was zu Verwirrung bei den Nutzern führen kann. |
getRestoredFocusableNode(previousNode) | Gibt den IFocusableNode dieses Baums zurück, der den aktiven Fokus erhalten soll, wenn der Fokus auf den Baum selbst zurückgesetzt wird. Wenn Sie eine Version dieser Methode implementieren, die nicht null zurückgibt, müssen Sie einige sehr wichtige Hinweise zum Fokus-Lebenszyklus eines Baums beachten: 1. Ein null-Wert für „previousNode“ ist keine Garantie für den Fokusstatus bei der Erstausführung, da Knoten gelöscht werden können. 2. Diese Methode wird nur verwendet, wenn der Fokus auf dem Baum selbst liegt, entweder über die Tabulatornavigation oder über FocusManager.focusTree(). In vielen Fällen wird stattdessen der zuvor fokussierte Knoten direkt fokussiert, wodurch diese Methode umgangen wird. 3. Das Standardverhalten (d.h. das Zurückgeben von „null“ hier) beinhaltet entweder die Wiederherstellung des vorherigen Knotens (previousNode) oder die Fokussierung auf die Wurzel des Baums. 4. Der angegebene Knoten ist manchmal nicht mehr gültig, z. B. wenn versucht wird, den Fokus auf einen Knoten zu setzen, der vor Kurzem aus dem übergeordneten Baum entfernt wurde. Implementierungen können die Gültigkeit des Knotens prüfen, um den Knoten zu spezialisieren, auf den der Fokus zurückfallen soll. Diese Methode soll vor allem Baumimplementierungen die Möglichkeit bieten, einen besseren Standardknoten als den Stammknoten anzugeben. |
getRootFocusableNode() | Gibt den fokussierbaren Knoten der obersten Ebene des Baums zurück. Es wird davon ausgegangen, dass der zurückgegebene Knoten den Fokus erhält, wenn der FocusManager einen Baum in einer Situation fokussieren möchte, in der er derzeit keinen fokussierten Knoten hat. |
lookUpFocusableNode(id) | Gibt den IFocusableNode zurück, der der angegebenen Element-ID entspricht, oder „null“, wenn es in diesem Baum keinen genauen Knoten mit dieser ID gibt oder die ID der Wurzel des Baums entspricht. Dies wird nie mit verschachtelten Bäumen übereinstimmen. |
onTreeBlur(nextTree) | Wird aufgerufen, wenn der zuvor aktiv fokussierte Knoten dieses Baums jetzt passiv fokussiert ist und kein anderer aktiver Knoten dieses Baums seinen Platz einnimmt. Für diese Funktion gelten dieselben Implementierungseinschränkungen und -überlegungen wie für onTreeFocus(). |
onTreeFocus(node, previousTree) | Wird aufgerufen, wenn ein Knoten dieses Baums den aktiven Fokus erhalten hat. Ein null-Wert für „previousTree“ bedeutet nicht unbedingt, dass Blockly zum ersten Mal den Fokus erhält. Tatsächlich können nur wenige Annahmen über den vorherigen Fokusstatus getroffen werden, da ein vorheriger Nullbaum einfach angibt, dass Blockly den aktiven Fokus nicht hatte, bevor dieser Baum den Fokus erhalten hat. Dies kann passieren, wenn der Fokus den Blockly-Injection-Div verlässt oder in anderen Fällen wie dem sitzungsspezifischen Fokus. Siehe IFocusableNode.onNodeFocus(), da für Implementierungen dieselben Einschränkungen gelten wie für diese Methode. |