Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.
JS Field
Introducción
JS Field se utiliza para renderizar contenido personalizado con JavaScript en la posición de un campo, comúnmente en bloques de detalles, elementos de solo lectura en formularios o como "Otros elementos personalizados" en columnas de tablas. Es adecuado para realizar presentaciones personalizadas, combinaciones de información derivada, insignias de estado, texto enriquecido o renderizado de gráficos, entre otros.

Tipos
- Tipo solo lectura: Se utiliza para visualización no editable, lee
ctx.valuepara renderizar la salida. - Tipo editable: Se utiliza para interacciones de entrada personalizadas, proporciona
ctx.getValue()/ctx.setValue(v)y el evento de contenedorjs-field:value-change, facilitando la sincronización bidireccional con los valores del formulario.
Escenarios de uso
-
Tipo solo lectura
- Bloque de detalles: Muestra contenido de solo lectura como resultados de cálculos, insignias de estado, fragmentos de texto enriquecido, gráficos, etc.;
- Bloque de tabla: Se utiliza como "Otras columnas personalizadas > JS Field" para visualización de solo lectura (si necesita una columna que no esté vinculada a un campo, utilice JS Column);
-
Tipo editable
- Bloque de formulario (CreateForm/EditForm): Se utiliza para controles de entrada personalizados o entradas compuestas, junto con la validación y el envío del formulario;
- Escenarios adecuados: Componentes de entrada de librerías externas, editores de texto enriquecido/código, componentes dinámicos complejos, etc.;
API de contexto en tiempo de ejecución
El código en tiempo de ejecución de JS Field puede utilizar directamente las siguientes capacidades de contexto:
ctx.element: Contenedor DOM del campo (ElementProxy), admiteinnerHTML,querySelector,addEventListener, etc.;ctx.value: Valor actual del campo (solo lectura);ctx.record: Objeto de registro actual (solo lectura);ctx.collection: Metainformación de la colección a la que pertenece el campo (solo lectura);ctx.requireAsync(url): Carga asíncronamente librerías AMD/UMD por URL;ctx.importAsync(url): Importa dinámicamente módulos ESM por URL;ctx.openView(options): Abre una vista configurada (ventana emergente/cajón/página);ctx.i18n.t()/ctx.t(): Internacionalización;ctx.onRefReady(ctx.ref, cb): Renderiza después de que el contenedor esté listo;ctx.libs.React/ctx.libs.ReactDOM/ctx.libs.antd/ctx.libs.antdIcons/ctx.libs.dayjs/ctx.libs.lodash/ctx.libs.math/ctx.libs.formula: Librerías comunes integradas como React / ReactDOM / Ant Design / Iconos de Ant Design / dayjs / lodash / math.js / formula.js, utilizadas para renderizado JSX, procesamiento de tiempo, manipulación de datos y operaciones matemáticas. (ctx.React/ctx.ReactDOM/ctx.antdaún se conservan por compatibilidad).ctx.render(vnode): Renderiza elementos React, cadenas HTML o nodos DOM en el contenedor predeterminadoctx.element; las renderizaciones repetidas reutilizarán el Root y sobrescribirán el contenido existente del contenedor.
Específico para el tipo editable (JSEditableField):
ctx.getValue(): Obtiene el valor actual del formulario (prioriza el estado del formulario, luego recurre a las props del campo).ctx.setValue(v): Establece el valor del formulario y las props del campo, manteniendo la sincronización bidireccional.- Evento de contenedor
js-field:value-change: Se activa cuando cambia el valor externo, facilitando que el script actualice la visualización de la entrada.
Editor y fragmentos
El editor de scripts de JS Field admite resaltado de sintaxis, sugerencias de errores y fragmentos de código integrados (Snippets).
Snippets: Abre la lista de fragmentos de código integrados, puede buscar e insertar en la posición actual del cursor con un clic.Run: Ejecuta directamente el código actual, la salida del registro de ejecución se muestra en el panel inferiorLogs, admiteconsole.log/info/warn/errory localización de errores con resaltado.

Puede combinarse con el empleado de IA para generar código:
Usos comunes
1) Renderizado básico (lectura del valor del campo)
2) Uso de JSX para renderizar componentes React
3) Carga de librerías de terceros (AMD/UMD o ESM)
4) Clic para abrir ventana emergente/cajón (openView)
5) Entrada editable (JSEditableFieldModel)
Notas
- Se recomienda utilizar un CDN confiable para la carga de librerías externas y preparar un plan de respaldo para escenarios de falla (por ejemplo,
if (!lib) return;). - Se sugiere priorizar el uso de
classo[name=...]para los selectores, evite usaridfijos para prevenir la duplicidad deiden múltiples bloques o ventanas emergentes. - Limpieza de eventos: El campo puede renderizarse varias veces debido a cambios en los datos o cambios de vista; antes de vincular eventos, debe limpiarlos o eliminar duplicados para evitar activaciones repetidas. Puede "eliminar primero y luego añadir".

