Block JS Block
Pengantar
JS Block adalah "Block render kustom" yang sangat fleksibel. Mendukung penulisan langsung script JavaScript untuk menghasilkan antarmuka, bind event, memanggil interface data, atau mengintegrasikan library pihak ketiga. Cocok untuk skenario visualisasi personal, eksperimen sementara, dan ekstensi ringan yang sulit dicakup oleh Block bawaan.
API Konteks Runtime
Konteks runtime JS Block telah menginjeksikan kemampuan umum, dapat langsung digunakan:
ctx.element: container DOM Block (sudah dilakukan secure wrapping, ElementProxy), mendukunginnerHTML,querySelector,addEventListener, dll.;ctx.requireAsync(url): load library AMD/UMD secara asynchronous berdasarkan URL;ctx.importAsync(url): import modul ESM secara dinamis berdasarkan URL;ctx.openView: membuka view yang sudah dikonfigurasi (Popup/drawer/page);ctx.useResource(...)+ctx.resource: mengakses data dengan cara resource;ctx.i18n.t()/ctx.t(): kemampuan internasionalisasi bawaan;ctx.onRefReady(ctx.ref, cb): render setelah container siap, hindari masalah timing;ctx.libs.React/ctx.libs.ReactDOM/ctx.libs.antd/ctx.libs.antdIcons/ctx.libs.dayjs/ctx.libs.lodash/ctx.libs.math/ctx.libs.formula: library umum bawaan seperti React / ReactDOM / Ant Design / icon Ant Design / dayjs / lodash / math.js / formula.js, dll., digunakan untuk render JSX, pemrosesan waktu, operasi data, dan operasi matematika. (ctx.React/ctx.ReactDOM/ctx.antdmasih dipertahankan untuk kompatibilitas.)ctx.render(vnode): render React element, HTML string, atau DOM node ke container defaultctx.element; multiple call akan menggunakan kembali React Root yang sama, dan menimpa konten container yang ada.
Tambah Block
- Dapat menambahkan JS Block di Page atau Popup.

Editor dan Snippet
Editor script JS Block mendukung syntax highlighting, error prompt, dan snippet kode bawaan (Snippets). Dapat dengan cepat menyisipkan contoh umum, seperti: render chart, bind event tombol, load library eksternal, render komponen React/Vue, timeline, info card, dll.
Snippets: Membuka daftar snippet kode bawaan, dapat dicari dan dengan satu klik menyisipkan snippet yang dipilih ke posisi cursor saat ini di area edit kode.Run: Langsung menjalankan kode di editor saat ini, dan output log eksekusi ke panelLogsdi bawah. Mendukung tampilanconsole.log/info/warn/error. Error akan disorot dan dapat dilokasi ke baris dan kolom spesifik.

Selain itu, di sudut kanan atas editor dapat langsung memanggil AI Employee "Frontend Engineer · Nathan", biarkan dia menulis atau memodifikasi script berdasarkan konteks saat ini, satu klik "Apply to editor" untuk diterapkan ke editor kemudian dijalankan untuk melihat efeknya. Detail di:
Lingkungan Runtime dan Keamanan
- Container: Sistem menyediakan container DOM aman
ctx.element(ElementProxy) untuk script, hanya mempengaruhi Block saat ini, tidak mengganggu area lain di Page. - Sandbox: Script berjalan dalam lingkungan terkontrol.
window/document/navigatormenggunakan secure proxy object. API umum dapat digunakan, perilaku berisiko dibatasi. - Re-render: Setelah Block disembunyikan kemudian ditampilkan kembali akan otomatis re-render (menghindari eksekusi berulang pada mount pertama).
Penggunaan Umum (Contoh Ringkas)
1) Render React (JSX)
2) Template Request API
3) Load ECharts dan Render
4) Membuka View (Drawer)
5) Membaca Resource dan Render JSON
Perhatian
- Disarankan menggunakan CDN terpercaya untuk load library eksternal.
- Saran penggunaan selector: prioritaskan menggunakan selector atribut
classatau[name=...]; hindari menggunakanidtetap, untuk mencegah duplikasiiddi beberapa Block/Popup yang menyebabkan konflik style atau event. - Pembersihan event: Block mungkin re-render beberapa kali, sebelum bind event harus melakukan pembersihan atau dedup, hindari trigger berulang. Dapat menggunakan cara "remove dulu kemudian add", atau listener satu kali, atau tambahkan tag untuk mencegah duplikasi.

