blockly > IFocusableTree

Interfejs IFocusableTree

Reprezentuje drzewo elementów, które można zaznaczyć, z własnym kontekstem aktywnego lub biernego zaznaczenia.

Pamiętaj, że zarządzanie narożnikiem jest obsługiwane przez FocusManager, a w implementacjach drzew można mieć w danym momencie maksymalnie 1 element IFocusableNode. Jeśli drzewo jest aktywne, to skupiony na nim węzeł jest uznawany za „aktywny” (jeśli skupiony jest na innym drzewie, to węzeł jest „bierny”).

Punkt skupienia jest wspólny dla co najmniej 1 drzewa, a każde drzewo może mieć dokładnie 1 aktywny lub pasywny węzeł (i w danym momencie na całej stronie może istnieć tylko 1 aktywny węzeł). Zamysłem pasywnego punktu skupienia jest dostarczenie użytkownikom kontekstu, w którym zostanie przywrócony punkt skupienia po powrocie do drzewa, które było wcześniej w centrum uwagi.

Jeśli potrzebujesz aktualnie skupionego węzła drzewa (biernego lub aktywnego), możesz użyć metody FocusableTreeTraverser.findFocusedNode.

Jeśli w przypadku tego drzewa trzeba pobrać określone węzły, użyj metody lookUpFocusableNode lub FocusableTreeTraverser.findFocusableNodeFor.

Podpis:

export interface IFocusableTree 

Metody

Metoda Opis
getNestedTrees()

Zwraca wszystkie drzewa bezpośrednio zagnieżdżone w tym drzewie.

Pamiętaj, że zwracana lista drzew nie musi być stabilna, ale wszystkie zwracane drzewa *muszą* być zarejestrowane w FocusManagerze. Dodatkowo musi zwracać rzeczywiste drzewa zagnieżdżone, ponieważ pominięcie takiego drzewa może wpłynąć na sposób, w jaki punkt skupienia zmienia mapę na konkretny węzeł i jego drzewo, co może wprowadzić użytkownika w błąd.

getRestoredFocusableNode(previousNode)

Zwraca węzeł IFocusableNode tego drzewa, który powinien otrzymać aktywne zaznaczenie, gdy drzewo samo otrzyma zaznaczenie.

Podczas implementowania wersji tej metody, która nie zwraca wartości null, należy wziąć pod uwagę kilka bardzo ważnych informacji dotyczących cyklu życia punktu skupienia drzewa: 1. Wartość null w elemencie previousNode nie gwarantuje stanu skupienia po raz pierwszy, ponieważ węzły mogą zostać usunięte. 2. Ta metoda jest używana tylko wtedy, gdy drzewo jest skupione, np. przez nawigację po kartach lub FocusManager.focusTree(). W wielu przypadkach zamiast tego bezpośrednio skupiany jest węzeł, który był wcześniej skupiony, co pozwala pominąć tę metodę. 3. Domyślne działanie (czyli zwracanie wartości null) polega na przywróceniu poprzedniego węzła (previousNode) lub skupieniu się na korzenia drzewa. 4. Podany węzeł może nie być już prawidłowy, na przykład wtedy, gdy próbujesz skupić się na węźle, który został niedawno usunięty z drzewa nadrzędnego. Implementacje mogą sprawdzać poprawność węzła, aby określić węzeł, na który należy przejść w przypadku błędu.

Ta metoda jest przeznaczona głównie do implementacji drzew z możliwością określenia lepszego węzła domyślnego niż ich korzeń.

getRootFocusableNode()

Zwraca najwyższy poziomy węzeł drzewa, który można ustawić jako aktywny.

Zwracany węzeł powinien być skupiony w przypadku, gdy FocusManager chce skupić drzewo w sytuacji, gdy nie ma obecnie skupionego węzła.

lookUpFocusableNode(id)

Zwraca element IFocusableNode odpowiadający podanemu identyfikatorowi elementu lub null, jeśli w drzewie nie ma dokładnego węzła o tym identyfikatorze lub jeśli identyfikator odpowiada korzeniowi drzewa.

Nigdy nie będzie pasować do zagnieżdżonych drzew.

onTreeBlur(nextTree)

Wywoływany, gdy wcześniej aktywnie skupiony węzeł tego drzewa jest teraz pasywnie skupiony i nie ma innego aktywnego węzła tego drzewa, który mógłby go zastąpić.

Ta funkcja ma te same ograniczenia i uwzględnia te same kwestie co onTreeFocus().

onTreeFocus(node, previousTree)

Jest wywoływany, gdy węzeł tego drzewa został aktywnie zaznaczony.

Pamiętaj, że wartość null w elemencie previousTree niekoniecznie oznacza, że Blockly po raz pierwszy jest w centrum uwagi. W rzeczywistości można wysnuć tylko kilka przypuszczeń dotyczących poprzedniego stanu fokusa, ponieważ poprzednie drzewo nullowe wskazuje po prostu, że przed tym, jak to drzewo zostało wybrane, Blockly nie miało aktywnego fokusa (co może się zdarzyć, gdy fokus opuszcza element div wstrzyknięcia Blockly lub w innych przypadkach, takich jak fokus efemeryczny).

Zobacz IFocusableNode.onNodeFocus(), ponieważ implementacje mają te same ograniczenia co ta metoda.