blockly > FocusManager

Class FocusManager

Singleton per halaman yang mengelola fokus Blockly di satu atau beberapa IFocusableTrees, dan menyinkronkan fokus ini secara dua arah dengan DOM.

Pemanggil yang ingin mengubah fokus input secara eksplisit untuk komponen Blockly tertentu di halaman harus menggunakan fungsi fokus di pengelola ini.

Pengelola bertanggung jawab untuk menangani peristiwa fokus dari DOM (yang mungkin muncul dari pengguna yang mengklik elemen halaman) dan memastikan bahwa IFocusableNodes yang sesuai ditandai dengan jelas sebagai disorot secara aktif/pasif dengan cara yang sama seperti yang akan direpresentasikan dengan panggilan ke focusNode().

Tanda Tangan:

export declare class FocusManager 

Konstruktor

Konstruktor Pengubah Deskripsi
(constructor)(addGlobalEventListener) Membuat instance baru class FocusManager

Properti

Properti Pengubah Jenis Deskripsi
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(tidak dideklarasikan)

Class CSS yang ditetapkan ke elemen IFocusableNode yang saat ini memiliki fokus DOM dan Blockly yang aktif.

Ini tidak boleh digunakan secara langsung. Sebagai gantinya, andalkan FocusManager untuk memastikan node memiliki fokus aktif (baik secara otomatis melalui fokus DOM atau secara manual melalui berbagai metode focus* yang disediakan oleh class ini).

Sebaiknya jangan buat kueri menggunakan nama class ini. Sebagai gantinya, gunakan metode FocusableTreeTraverser atau IFocusableTree untuk menemukan node tertentu.

PASSIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(tidak dideklarasikan)

Class CSS yang ditetapkan ke elemen IFocusableNode yang saat ini memiliki fokus pasif (yaitu, node terbaru dalam hierarki relatifnya yang memiliki fokus aktif--lihat ACTIVE_FOCUS_NODE_CSS_CLASS_NAME--dan akan menerima fokus aktif lagi jika hierarki di sekitarnya diminta untuk difokuskan, yaitu menggunakan focusTree di bawah).

Lihat ACTIVE_FOCUS_NODE_CSS_CLASS_NAME untuk mengetahui peringatan dan batasan terkait penggunaan konstanta ini secara langsung (umumnya tidak perlu digunakan).

Metode

Metode Pengubah Deskripsi
focusNode(focusableNode)

Memfokuskan input DOM pada node yang ditentukan, dan menandainya sebagai difokuskan secara aktif.

Setiap node yang sebelumnya difokuskan akan diperbarui agar ditandai secara pasif (jika berada dalam hierarki yang dapat difokuskan yang berbeda) atau diburamkan (jika berada dalam hierarki yang sama).

**Penting**: Jika node yang diberikan tidak dapat difokuskan (misalnya, metode canBeFocused()-nya menampilkan nilai salah), node tersebut akan diabaikan dan status fokus yang ada tidak akan berubah.

focusTree(focusableTree)

Memfokuskan IFocusableTree tertentu. Hal ini berarti memulihkan fokus aktif ke node yang difokuskan secara pasif pada hierarki, atau memfokuskan node root hierarki.

Perhatikan bahwa jika hierarki yang ditentukan sudah memiliki node yang difokuskan, hal ini tidak akan mengubah fokus yang ada (kecuali jika node tersebut memiliki fokus pasif, node tersebut akan dipulihkan ke fokus aktif).

Lihat getFocusedNode untuk mengetahui detail tentang pengaruh node lain.

getFocusedNode()

Menampilkan IFocusableNode saat ini dengan fokus (yang selalu terikat dengan IFocusableTree yang difokuskan), atau null jika tidak ada.

Perhatikan bahwa fungsi ini akan mempertahankan paritas dengan IFocusableTree.getFocusedNode(). Artinya, jika hierarki itu sendiri memiliki fokus, tetapi tidak ada turunan non-root-nya yang memiliki fokus, fungsi ini akan menampilkan null, tetapi getFocusedTree() tidak akan menampilkannya.

Perhatikan juga bahwa jika fokus sementara saat ini diambil (misalnya, menggunakan takeEphemeralFocus), node yang ditampilkan di sini mungkin saat ini tidak memiliki fokus DOM.

getFocusedTree()

Menampilkan IFocusableTree saat ini yang memiliki fokus, atau null jika saat ini tidak ada.

Perhatikan juga bahwa jika fokus sementara saat ini diambil (misalnya, menggunakan takeEphemeralFocus), hierarki yang ditampilkan di sini mungkin saat ini tidak memiliki fokus DOM.

getFocusManager() static

Menampilkan FocusManager global halaman.

Instance yang ditampilkan dijamin tidak berubah di seluruh panggilan fungsi, tetapi dapat berubah di seluruh pemuatan halaman.

isRegistered(tree) Menampilkan apakah hierarki yang ditentukan telah terdaftar di pengelola ini menggunakan registerTree dan belum dihapus pendaftarannya menggunakan unregisterTree.
registerTree(tree)

Mendaftarkan IFocusableTree baru untuk pengelolaan fokus otomatis.

Jika saat ini hierarki memiliki elemen dengan fokus DOM, hal ini tidak akan memengaruhi status internal di pengelola ini hingga fokus berubah ke elemen/node baru yang sekarang dipantau.

Fungsi ini ditampilkan jika hierarki yang disediakan saat ini sudah terdaftar di pengelola ini. Gunakan isRegistered untuk memeriksa jika tidak dapat dipastikan apakah hierarki telah didaftarkan.

takeEphemeralFocus(focusableElement)

Segera mengambil fokus untuk elemen tertentu hingga lambda yang ditampilkan dipanggil. Hal ini diharapkan sangat berguna untuk alur UI sementara seperti dialog.

PENTING: lambda yang ditampilkan *harus* dipanggil. Jika tidak, fokus otomatis tidak akan berfungsi lagi di mana pun di halaman. Sebaiknya kaitkan panggilan lambda ke penutupan UI yang sesuai sehingga jika input diubah secara manual ke elemen di luar UI sementara, UI akan ditutup dan input otomatis dipulihkan. Perhatikan bahwa lambda ini harus dipanggil tepat sekali dan panggilan berikutnya akan menampilkan error.

Perhatikan bahwa pengelola akan terus melacak sinyal input DOM meskipun fokus sementara aktif, tetapi tidak akan benar-benar mengubah status node hingga lambda yang ditampilkan dipanggil. Selain itu, hanya 1 konteks fokus sementara yang dapat aktif pada waktu tertentu (mencoba mengaktifkan lebih dari satu secara bersamaan akan menyebabkan error ditampilkan).

unregisterTree(tree)

Membatalkan pendaftaran IFocusableTree dari pengelolaan fokus otomatis.

Jika sebelumnya memiliki node yang difokuskan, sorotannya akan dihapus. Fungsi ini TIDAK mengubah fokus DOM.

Fungsi ini ditampilkan jika hierarki yang diberikan saat ini tidak terdaftar di pengelola ini.