IFocusableTree 介面
代表可聚焦元素的樹狀結構,並具有自己的有效/被動焦點內容。
請注意,焦點是由 FocusManager 處理,且樹狀結構實作最多只能同時將焦點放在一個 IFocusableNode。如果樹狀結構本身有焦點,則系統會將樹狀結構的焦點節點視為「有效」(如果另一個樹狀結構有焦點,則為「無效」)。
焦點會在一個或多個樹狀結構之間共用,每個樹狀結構只能有一個有效或無效節點 (且在任何時間點,整個網頁上只能存在一個有效節點)。被動焦點的概念是為使用者提供背景資訊,說明在前往先前已聚焦的樹狀結構時,焦點會恢復至何處。
請注意,如果需要樹狀結構目前聚焦的節點 (被動或主動),可以使用 FocusableTreeTraverser.findFocusedNode。
請注意,如果需要為此樹狀結構擷取特定節點,請使用 lookUpFocusableNode 或 FocusableTreeTraverser.findFocusableNodeFor。
Signature:
export interface IFocusableTree
方法
方法 | 說明 |
---|---|
getNestedTrees() | 傳回此樹狀結構下所有直接巢狀的樹狀結構。 請注意,傳回的樹狀結構清單不必穩定,但所有傳回的樹狀結構都必須向 FocusManager 註冊。此外,這項作業必須傳回實際的巢狀樹狀結構,因為省略巢狀樹狀結構會影響焦點變更對應至特定節點及其樹狀結構的方式,可能會導致使用者感到困惑。 |
getRestoredFocusableNode(previousNode) | 傳回此樹狀結構的 IFocusableNode,當樹狀結構本身獲得焦點時,應接收有效焦點。 實作不會傳回空值的此方法版本時,請務必留意樹狀結構的焦點生命週期:1. 由於節點可刪除,因此 previousNode 為空值並不能保證首次聚焦狀態。2. 只有在透過分頁導覽或 FocusManager.focusTree() 將焦點放在樹狀結構本身時,才會使用這個方法。在許多情況下,系統會直接將焦點放在先前已聚焦的節點,而略過這個方法。3. 預設行為 (即在此處傳回空值) 包括還原先前的節點 (previousNode),或將焦點設為樹狀結構的根節點。4. 提供的節點有時可能不再有效,例如嘗試將焦點放在最近從父樹狀結構移除的節點時。實作項目可以檢查節點的有效性,以便將焦點指定為應備援的節點。 這個方法主要用於提供樹狀結構實作項目,以便指定比根目錄更佳的預設節點。 |
getRootFocusableNode() | 傳回樹狀結構的頂層可聚焦節點。 如果 FocusManager 想在目前沒有聚焦節點的情況下聚焦樹狀結構,則傳回的節點應會聚焦。 |
lookUpFocusableNode(id) | 傳回與指定元素 ID 相對應的 IFocusableNode,如果這個樹狀結構中沒有該 ID 的確切節點,或是該 ID 對應至樹狀結構的根目錄,則傳回 null。 這永遠不會與巢狀樹狀結構相符。 |
onTreeBlur(nextTree) | 當這個樹狀結構中先前處於主動聚焦狀態的節點現在處於被動聚焦狀態,且這個樹狀結構中沒有其他處於主動聚焦狀態的節點時,系統會呼叫這個方法。 這項方法的實作限制和考量事項與 onTreeFocus() 相同。 |
onTreeFocus(node, previousTree) | 當這個樹狀結構的節點已獲得有效焦點時,系統會呼叫此方法。 請注意,previousTree 為空值並不一定表示 Blockly 是第一次收到焦點。事實上,我們很難推測先前的焦點狀態,因為先前的空值樹狀結構只是表示 Blockly 在這個樹狀結構獲得焦點前,並未保留有效焦點 (這種情況可能發生在焦點離開 Blockly 插入的 div 時,或在焦點短暫存在的其他情況下)。 請參閱 IFocusableNode.onNodeFocus(),因為實作項目與該方法具有相同的限制。 |