IFocusableTree インターフェース
独自のアクティブ/パッシブ フォーカス コンテキストを持つフォーカス可能な要素のツリーを表します。
フォーカスは FocusManager によって処理され、ツリー実装では一度にフォーカスできる IFocusableNode は 1 つだけです。ツリー自体にフォーカスがある場合、そのツリーのフォーカスがあるノードは「アクティブ」と見なされます(別のツリーにフォーカスがある場合は「パッシブ」)。
フォーカスは 1 つ以上のツリー間で共有されます。各ツリーには、アクティブ ノードまたはパッシブ ノードを 1 つだけ設定できます(ページ全体に存在できるアクティブ ノードは 1 つだけです)。パッシブ フォーカスの考え方は、以前フォーカスされていたツリーに戻ったときにフォーカスが復元される場所をユーザーに示すことです。
ツリーの現在のフォーカスされているノード(パッシブまたはアクティブ)が必要な場合は、FocusableTreeTraverser.findFocusedNode を使用できます。
このツリーに対して特定のノードを取得する必要がある場合は、lookUpFocusableNode または FocusableTreeTraverser.findFocusableNodeFor を使用します。
署名:
export interface IFocusableTree
メソッド
メソッド | 説明 |
---|---|
getNestedTrees() | このツリーの下に直接ネストされているすべてのツリーを返します。 返されるツリーのリストは安定している必要はありませんが、返されたツリーはすべて FocusManager に登録する必要があります。また、ネストされたツリーを省略すると、フォーカスの移動が特定のノードとそのツリーにどのようにマッピングされるかに影響し、ユーザーの混乱を招く可能性があるため、実際のネストされたツリーを返す必要があります。 |
getRestoredFocusableNode(previousNode) | ツリー自体にフォーカスが戻されたときにアクティブなフォーカスを受け取る必要がある、このツリーの IFocusableNode を返します。 null を返さないバージョンのこのメソッドを実装する際は、ツリーのフォーカス ライフサイクルについて、次の点に注意してください。1. ノードは削除される可能性があるため、previousNode が null の場合、最初のフォーカス状態が保証されるわけではありません。2. このメソッドは、タブ ナビゲーションまたは FocusManager.focusTree() のいずれかによってツリー自体にフォーカスが当てられている場合にのみ使用されます。多くの場合、以前にフォーカスされていたノードが直接フォーカスされるため、このメソッドはバイパスされます。3. デフォルトの動作(ここでは null を返す)では、前のノード(previousNode)を復元するか、ツリーのルートにフォーカスを合わせます。4. 指定されたノードが有効でなくなることがあります。たとえば、親ツリーから最近削除されたノードをフォーカスしようとした場合などです。実装では、フォーカスがフォールバックするノードを特殊化するために、ノードの有効性を確認できます。 このメソッドは主に、ルートよりも優れたデフォルト ノードを指定する手段をツリー実装に提供する目的で用意されています。 |
getRootFocusableNode() | ツリーの最上位のフォーカス可能なノードを返します。 フォーカスが設定されていないノードを FocusManager がフォーカスしたい場合、返されたノードがフォーカスされるようにする必要があります。 |
lookUpFocusableNode(id) | 指定された要素 ID に対応する IFocusableNode を返します。このツリー内にその ID を持つノードが存在しない場合、または ID がツリーのルートに該当する場合は null を返します。 ネストされたツリーには一致しません。 |
onTreeBlur(nextTree) | このツリーで以前にアクティブにフォーカスされていたノードがパッシブにフォーカスされ、このツリー内の他のアクティブなノードがその場所を占有していない場合に呼び出されます。 実装に関する制限と考慮事項は、onTreeFocus() と同じです。 |
onTreeFocus(node, previousTree) | このツリーのノードがアクティブなフォーカスを受け取ったときに呼び出されます。 previousTree が null であることは、Blockly が初めてフォーカスを受け取ったとは限りません。実際、以前のフォーカス状態について推測できることはほとんどありません。以前の null ツリーは、このツリーがフォーカスされる前に Blockly がアクティブなフォーカスを保持していなかったことを示しているだけです(これは、フォーカスが Blockly 挿入 div から移動したために発生する可能性があります。また、エフェメラル フォーカスなどの他のケースでも発生する可能性があります)。 実装にはそのメソッドと同じ制限が適用されるため、IFocusableNode.onNodeFocus() をご覧ください。 |