Giao diện IFocusableTree
Biểu thị một cây gồm các phần tử có thể lấy tiêu điểm với ngữ cảnh tiêu điểm chủ động/bị động riêng.
Xin lưu ý rằng tiêu điểm được FocusManager xử lý và việc triển khai cây có thể có tối đa một IFocusableNode được lấy tiêu điểm tại một thời điểm. Nếu chính cây có tiêu điểm, thì nút được lấy tiêu điểm của cây sẽ được coi là "đang hoạt động" ("thụ động" nếu một cây khác có tiêu điểm).
Tiêu điểm được chia sẻ giữa một hoặc nhiều cây, trong đó mỗi cây có thể có đúng một nút chủ động hoặc bị động (và chỉ có một nút chủ động có thể tồn tại trên toàn trang tại bất kỳ thời điểm nào). Ý tưởng của tiêu điểm thụ động là cung cấp ngữ cảnh cho người dùng về vị trí tiêu điểm sẽ được khôi phục khi họ quay lại cây đã được lấy làm tiêu điểm trước đó.
Xin lưu ý rằng nếu cần nút được lấy làm tâm điểm hiện tại của cây (thụ động hoặc chủ động), bạn có thể sử dụng FocusableTreeTraverser.findFocusedNode.
Lưu ý rằng nếu cần truy xuất các nút cụ thể cho cây này, hãy sử dụng lookUpFocusableNode hoặc FocusableTreeTraverser.findFocusableNodeFor.
Chữ ký:
export interface IFocusableTree
Phương thức
Phương thức | Mô tả |
---|---|
getNestedTrees() | Trả về tất cả cây lồng trực tiếp trong cây này. Xin lưu ý rằng danh sách cây được trả về không cần phải ổn định, tuy nhiên tất cả cây được trả về *phải* được đăng ký với FocusManager. Ngoài ra, hàm này phải trả về các cây lồng nhau thực tế vì việc bỏ qua một cây lồng nhau sẽ ảnh hưởng đến cách các thay đổi về tiêu điểm liên kết đến một nút cụ thể và cây của nút đó, có thể khiến người dùng nhầm lẫn. |
getRestoredFocusableNode(previousNode) | Trả về IFocusableNode của cây này sẽ nhận được tiêu điểm đang hoạt động khi chính cây này được trả về tiêu điểm. Có một số lưu ý rất quan trọng cần cân nhắc về vòng đời tiêu điểm của cây khi triển khai phiên bản phương thức này không trả về giá trị rỗng: 1. previousNode rỗng không đảm bảo trạng thái tiêu điểm lần đầu tiên vì các nút có thể bị xoá. 2. Phương thức này chỉ được dùng khi chính cây được lấy làm tiêu điểm, thông qua thao tác điều hướng thẻ hoặc thông qua FocusManager.focusTree(). Trong nhiều trường hợp, nút được lấy làm tiêu điểm trước đó sẽ được lấy làm tiêu điểm trực tiếp, bỏ qua phương thức này. 3. Hành vi mặc định (tức là trả về giá trị rỗng tại đây) liên quan đến việc khôi phục nút trước đó (previousNode) hoặc lấy tiêu điểm là gốc của cây. 4. Đôi khi, nút được cung cấp có thể không còn hợp lệ, chẳng hạn như trong trường hợp bạn cố gắng lấy tiêu điểm một nút gần đây đã bị xoá khỏi cây mẹ. Các hoạt động triển khai có thể kiểm tra tính hợp lệ của nút để chuyên biệt hoá nút mà tiêu điểm sẽ quay lại. Phương thức này chủ yếu nhằm cung cấp các phương thức triển khai cây để chỉ định nút mặc định tốt hơn so với nút gốc. |
getRootFocusableNode() | Trả về nút có thể lấy tiêu điểm cấp cao nhất của cây. Dự kiến nút được trả về sẽ được lấy làm tâm điểm trong trường hợp FocusManager muốn lấy một cây làm tâm điểm trong trường hợp cây đó hiện không có nút được lấy làm tâm điểm. |
lookUpFocusableNode(id) | Trả về IFocusableNode tương ứng với mã phần tử đã chỉ định hoặc rỗng nếu không có nút chính xác nào trong cây này có mã đó hoặc nếu mã tương ứng với gốc của cây. Biểu thức này sẽ không bao giờ khớp với cây lồng nhau. |
onTreeBlur(nextTree) | Được gọi khi nút trước đây được lấy tiêu điểm chủ động của cây này hiện được lấy tiêu điểm thụ động và không có nút nào khác của cây này thay thế. Phương thức này có các quy định hạn chế và điều cần cân nhắc khi triển khai giống như onTreeFocus(). |
onTreeFocus(node, previousTree) | Được gọi khi một nút của cây này nhận được tiêu điểm đang hoạt động. Xin lưu ý rằng previousTree rỗng không nhất thiết cho biết đây là lần đầu tiên Blockly nhận được tiêu điểm. Trên thực tế, bạn có thể đưa ra một số giả định về trạng thái tiêu điểm trước đó vì cây rỗng trước đó chỉ cho biết rằng Blockly không giữ tiêu điểm đang hoạt động trước khi cây này được lấy tiêu điểm (điều này có thể xảy ra do tiêu điểm thoát khỏi div chèn Blockly hoặc đối với các trường hợp khác như tiêu điểm tạm thời). Xem IFocusableNode.onNodeFocus() vì các phương thức triển khai có cùng các quy tắc hạn chế như với phương thức đó. |