JS Item
Giới thiệu
JS Item được dùng cho "mục tùy chỉnh" (không gắn Field) trong Form. Bạn có thể dùng JavaScript/JSX để render nội dung bất kỳ (gợi ý, thống kê, xem trước, nút bấm, v.v.), và tương tác với ngữ cảnh Form, bản ghi, phù hợp với các trường hợp như xem trước thời gian thực, gợi ý hướng dẫn, component tương tác nhỏ, v.v.

API ngữ cảnh runtime (thường dùng)
ctx.element: Container DOM của mục hiện tại (ElementProxy), hỗ trợinnerHTML,querySelector,addEventListener, v.v.;ctx.form: Instance AntD Form, có thểgetFieldValue / getFieldsValue / setFieldsValue / validateFields, v.v.;ctx.blockModel: Model của Block Form chứa nó, có thể lắng ngheformValuesChangeđể thực hiện liên kết;ctx.record/ctx.collection: Bản ghi hiện tại và thông tin meta collection (có sẵn trong một s ố trường hợp);ctx.requireAsync(url): Tải bất đồng bộ thư viện AMD/UMD theo URL;ctx.importAsync(url): Import động module ESM theo URL;ctx.openView(viewUid, options): Mở view đã được cấu hình (Drawer/hộp thoại/Trang);ctx.message/ctx.notification: Gợi ý và thông báo toàn cục;ctx.t()/ctx.i18n.t(): Quốc tế hóa;ctx.onRefReady(ctx.ref, cb): Render sau khi container sẵn sàng;ctx.libs.React/ctx.libs.ReactDOM/ctx.libs.antd/ctx.libs.antdIcons/ctx.libs.dayjs/ctx.libs.lodash/ctx.libs.math/ctx.libs.formula: Các thư viện thông dụng có sẵn như React / ReactDOM / Ant Design / Ant Design Icons / dayjs / lodash / math.js / formula.js, dùng cho render JSX, xử lý thời gian, thao tác dữ liệu và tính toán toán học. (ctx.React/ctx.ReactDOM/ctx.antdvẫn được giữ lại để tương thích.)ctx.render(vnode): Render React element/HTML/DOM vào container mặc địnhctx.element; render lặp lại sẽ tái sử dụng Root, và ghi đè nội dung hiện có của container.
Trình chỉnh sửa và Snippets
Snippets: Mở danh sách snippets có sẵn, có thể tìm kiếm và chèn vào vị trí con trỏ hiện tại bằng một cú nhấp.Run: Chạy trực tiếp mã hiện tại, và xuất log chạy ra panelLogsở dưới; hỗ trợconsole.log/info/warn/errorvà định vị tô sáng lỗi.

- Có thể kết hợp với AI Employee để tạo/chỉnh sửa script: AI Employee · Nathan: Frontend Engineer
Cách sử dụng phổ biến (ví dụ ngắn gọn)
1) Xem trước thời gian thực (đọc giá trị Form)
2) Mở view (Drawer)
3) Tải thư viện bên ngoài và render
Lưu ý
- Nên sử dụng CDN đáng tin cậy khi tải thư viện bên ngoài, và xử lý fallback cho các trường hợp thất bại (ví dụ
if (!lib) return;). - Selector nên ưu tiên sử dụng
classhoặc[name=...], tránh sử dụngidcố định, để ngăn chặnidtrùng lặp trong nhiều Block/Popup. - Dọn dẹp sự kiện: Giá trị Form thay đổi thường xuyên sẽ kích hoạt nhiều lần render, trước khi gắn sự kiện nên dọn dẹp hoặc loại bỏ trùng lặp (như
removetrước rồiadd, hoặc{ once: true }, hoặc đánh dấudatasetđể chống trùng lặp).

