blockly > IFocusableTree

Antarmuka IFocusableTree

Merepresentasikan hierarki elemen yang dapat difokuskan dengan konteks fokus aktif/pasifnya sendiri.

Perhatikan bahwa fokus ditangani oleh FocusManager, dan implementasi hierarki dapat memiliki maksimal satu IFocusableNode yang difokuskan pada satu waktu. Jika hierarki itu sendiri memiliki fokus, node yang difokuskan hierarki akan dianggap 'aktif' ('pasif' jika hierarki lain memiliki fokus).

Fokus dibagikan di antara satu atau beberapa hierarki, dengan setiap hierarki dapat memiliki tepat satu node aktif atau pasif (dan hanya satu node aktif yang dapat ada di seluruh halaman pada waktu tertentu). Ide fokus pasif adalah untuk memberikan konteks kepada pengguna tentang tempat fokus mereka akan dipulihkan setelah kembali ke hierarki yang sebelumnya difokuskan.

Perhatikan bahwa jika node yang difokuskan saat ini (pasif atau aktif) diperlukan, FocusableTreeTraverser.findFocusedNode dapat digunakan.

Perhatikan bahwa jika node tertentu perlu diambil untuk hierarki ini, gunakan lookUpFocusableNode atau FocusableTreeTraverser.findFocusableNodeFor.

Tanda Tangan:

export interface IFocusableTree 

Metode

Metode Deskripsi
getNestedTrees()

Menampilkan semua hierarki yang disusun bertingkat langsung di bawah hierarki ini.

Perhatikan bahwa daftar hierarki yang ditampilkan tidak perlu stabil, tetapi semua hierarki yang ditampilkan *harus* didaftarkan dengan FocusManager. Selain itu, tindakan ini harus menampilkan hierarki bertingkat yang sebenarnya karena menghilangkan hierarki bertingkat akan memengaruhi cara perubahan fokus dipetakan ke node tertentu dan hierarkinya, yang berpotensi menyebabkan kebingungan pengguna.

getRestoredFocusableNode(previousNode)

Menampilkan IFocusableNode dari hierarki ini yang harus menerima fokus aktif saat hierarki itu sendiri memiliki fokus yang ditampilkan.

Ada beberapa catatan yang sangat penting untuk dipertimbangkan tentang siklus proses fokus hierarki saat menerapkan versi metode ini yang tidak menampilkan null: 1. previousNode null tidak menjamin status fokus pertama karena node dapat dihapus. 2. Metode ini hanya digunakan saat hierarki itu sendiri difokuskan, baik melalui navigasi tab maupun melalui FocusManager.focusTree(). Dalam banyak kasus, node yang sebelumnya difokuskan akan langsung difokuskan, yang akan mengabaikan metode ini. 3. Perilaku default (yaitu menampilkan null di sini) melibatkan pemulihan node sebelumnya (previousNode) atau memfokuskan root hierarki. 4. Node yang diberikan terkadang mungkin tidak lagi valid, seperti saat ada upaya untuk memfokuskan node yang baru-baru ini dihapus dari hierarki induknya. Implementasi dapat memeriksa validitas node untuk mengkhususkan node yang akan menjadi fokus.

Metode ini sebagian besar dimaksudkan untuk memberikan implementasi hierarki dengan cara menentukan node default yang lebih baik daripada root-nya.

getRootFocusableNode()

Menampilkan node tingkat atas yang dapat difokuskan dari hierarki.

Node yang ditampilkan diharapkan akan difokuskan jika FocusManager ingin memfokuskan hierarki dalam situasi saat ini tidak memiliki node yang difokuskan.

lookUpFocusableNode(id)

Menampilkan IFocusableNode yang sesuai dengan ID elemen yang ditentukan, atau null jika tidak ada node yang sama persis dalam hierarki ini dengan ID tersebut atau jika ID sesuai dengan root hierarki.

Hal ini tidak akan pernah cocok dengan hierarki bertingkat.

onTreeBlur(nextTree)

Dipanggil saat node yang sebelumnya difokuskan secara aktif dari hierarki ini kini difokuskan secara pasif dan tidak ada node aktif lain dari hierarki ini yang menggantikannya.

Ini memiliki batasan dan pertimbangan penerapan yang sama seperti onTreeFocus().

onTreeFocus(node, previousTree)

Dipanggil saat node hierarki ini telah menerima fokus aktif.

Perhatikan bahwa previousTree null tidak selalu menunjukkan bahwa ini adalah pertama kalinya Blockly menerima fokus. Faktanya, hanya sedikit asumsi yang dapat dibuat tentang status fokus sebelumnya karena hierarki null sebelumnya hanya menunjukkan bahwa Blockly tidak memiliki fokus aktif sebelum hierarki ini menjadi fokus (yang dapat terjadi karena fokus keluar dari div injeksi Blockly, atau untuk kasus lain seperti fokus sementara).

Lihat IFocusableNode.onNodeFocus() karena implementasi memiliki batasan yang sama dengan metode tersebut.