JS Field
Giới thiệu
JS Field được dùng để render nội dung tùy chỉnh bằng JavaScript ở vị trí Field, thường gặp trong Block Chi tiết, mục chỉ đọc của Form, hoặc "mục tùy chỉnh khác" trong cột Table. Phù hợp để hiển thị cá nhân hóa, tổ hợp thông tin phái sinh, huy hiệu trạng thái, render văn bản phong phú hoặc biểu đồ, v.v.

Loại
- Loại chỉ đọc: Dùng để hiển thị không thể chỉnh sửa, đọc
ctx.valueđể render output. - Loại có thể chỉnh sửa: Dùng cho tương tác nhập tùy chỉnh, cung cấp
ctx.getValue()/ctx.setValue(v)và sự kiện containerjs-field:value-change, thuận tiện đồng bộ hai chiều với giá trị Form.
Trường hợp sử dụng
-
Loại chỉ đọc
- Block Chi tiết: Hiển thị kết quả tính toán, huy hiệu trạng thái, đoạn văn bản phong phú, biểu đồ, v.v. dạng chỉ đọc;
- Block Table: Làm "cột tùy chỉnh khác > JS Field" để hiển thị chỉ đọc (nếu cần cột không gắn với Field, vui lòng dùng JS Column);
-
Loại có thể chỉnh sửa
- Block Form (CreateForm/EditForm): Dùng cho điều khiển nhập tùy chỉnh hoặc nhập tổ hợp, theo xác thực và gửi của Form;
- Trường hợp phù hợp: Component nhập của thư viện bên ngoài, trình chỉnh sửa văn bản phong phú/mã, component động phức tạp, v.v.;
API ngữ cảnh runtime
Mã runtime của JS Field có thể trực tiếp sử dụng các khả năng ngữ cảnh sau:
ctx.element: Container DOM của Field (ElementProxy), hỗ trợinnerHTML,querySelector,addEventListener, v.v.;ctx.value: Giá trị Field hiện tại (chỉ đọc);ctx.record: Đối tượng bản ghi hiện t ại (chỉ đọc);ctx.collection: Thông tin meta của collection mà Field thuộc về (chỉ đọc);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(options): Mở view đã được cấu hình (Popup/Drawer/Trang);ctx.i18n.t()/ctx.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, chuỗi HTML hoặc node 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.
Đặc trưng cho loại có thể chỉnh sửa (JSEditableField):
ctx.getValue(): Lấy giá trị Form hiện tại (ưu tiên sử dụng trạng thái Form, sau đó fallback về props của Field).ctx.setValue(v): Cài đặt giá trị Form và props của Field, duy trì đồng bộ hai chiều.- Sự kiện container
js-field:value-change: Kích hoạt khi giá trị bên ngoài thay đổi, thuận tiện cho script cập nhật hiển thị nhập.

