logologo
Empezar
Manual
Desarrollo
Plugins
API
Inicio
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Empezar
Manual
Desarrollo
Plugins
API
Inicio
logologo
Descripción general de RunJS
Importación de módulos
Renderizado en contenedor

Variables globales

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.collection
Next Pagectx.dataSource
Aviso de traducción IA

Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.

#ctx.collectionField

La instancia del campo de la colección (CollectionField) asociada al contexto de ejecución actual de RunJS, utilizada para acceder a los metadatos, tipos, reglas de validación e información de asociación del campo. Solo existe cuando el campo está vinculado a la definición de una colección; los campos personalizados o virtuales pueden ser null.

#Escenarios de uso

EscenarioDescripción
JSFieldRealizar vinculaciones o validaciones en campos de formulario basadas en interface, enum, targetCollection, etc.
JSItemAcceder a los metadatos del campo correspondiente a la columna actual en elementos de una subtabla.
JSColumnSeleccionar métodos de renderizado basados en collectionField.interface o acceder a targetCollection en columnas de una tabla.

Nota: ctx.collectionField solo está disponible cuando el campo está vinculado a la definición de una colección; suele ser undefined en escenarios como bloques independientes (JSBlock) o eventos de acción sin vinculación a campos. Se recomienda realizar una comprobación de valores nulos antes de su uso.

#Definición de tipo

collectionField: CollectionField | null | undefined;

#Propiedades comunes

PropiedadTipoDescripción
namestringNombre del campo (ej. status, userId)
titlestringTítulo del campo (incluye internacionalización)
typestringTipo de dato del campo (string, integer, belongsTo, etc.)
interfacestringTipo de interfaz del campo (input, select, m2o, o2m, m2m, etc.)
collectionCollectionLa colección a la que pertenece el campo
targetCollectionCollectionLa colección de destino del campo de asociación (solo para tipos de asociación)
targetstringNombre de la colección de destino (para campos de asociación)
enumarrayOpciones de enumeración (select, radio, etc.)
defaultValueanyValor por defecto
collectionNamestringNombre de la colección a la que pertenece
foreignKeystringNombre del campo de clave foránea (belongsTo, etc.)
sourceKeystringClave de origen de la asociación (hasMany, etc.)
targetKeystringClave de destino de la asociación
fullpathstringRuta completa (ej. main.users.status), utilizada para la API o referencias de variables
resourceNamestringNombre del recurso (ej. users.status)
readonlybooleanIndica si es de solo lectura
titleablebooleanIndica si puede mostrarse como un título
validationobjectConfiguración de las reglas de validación
uiSchemaobjectConfiguración de la interfaz de usuario (UI)
targetCollectionTitleFieldCollectionFieldEl campo de título de la colección de destino (para campos de asociación)

#Métodos comunes

MétodoDescripción
isAssociationField(): booleanIndica si es un campo de asociación (belongsTo, hasMany, hasOne, belongsToMany, etc.)
isRelationshipField(): booleanIndica si es un campo de relación (incluyendo o2o, m2o, o2m, m2m, etc.)
getComponentProps(): objectObtiene las propiedades (props) por defecto del componente del campo
getFields(): CollectionField[]Obtiene la lista de campos de la colección de destino (solo campos de asociación)
getFilterOperators(): object[]Obtiene los operadores de filtrado compatibles con este campo (ej. $eq, $ne, etc.)

#Ejemplos

#Renderizado condicional basado en el tipo de interfaz

if (!ctx.collectionField) return null;
const { interface: iface } = ctx.collectionField;
if (['m2o', 'o2m', 'm2m'].includes(iface)) {
  // Campo de asociación: mostrar registros asociados
  const target = ctx.collectionField.targetCollection;
  // ...
} else if (iface === 'select' || iface === 'radioGroup') {
  const options = ctx.collectionField.enum || [];
  // ...
}

#Determinar si es un campo de asociación y acceder a la colección de destino

if (ctx.collectionField?.isAssociationField()) {
  const targetCol = ctx.collectionField.targetCollection;
  const titleField = targetCol?.titleCollectionField?.name;
  // Procesar según la estructura de la colección de destino
}

#Obtener opciones de enumeración

const options = ctx.collectionField?.enum ?? [];
const labels = options.map((o) => (typeof o === 'object' ? o.label : o));

#Renderizado condicional basado en el modo de solo lectura/visualización

const { Input } = ctx.libs.antd;
if (ctx.collectionField?.readonly) {
  ctx.render(<span>{ctx.getValue?.() ?? '-'}</span>);
} else {
  ctx.render(<Input onChange={(e) => ctx.setValue?.(e.target.value)} />);
}

#Obtener el campo de título de la colección de destino

// Al mostrar un campo de asociación, use targetCollectionTitleField para obtener el nombre del campo de título
const titleField = ctx.collectionField?.targetCollectionTitleField;
const titleKey = titleField?.name ?? 'title';
const assocValue = ctx.getValue?.() ?? ctx.record?.[ctx.collectionField?.name];
const label = assocValue?.[titleKey];

#Relación con ctx.collection

NecesidadUso recomendado
Colección a la que pertenece el campo actualctx.collectionField?.collection o ctx.collection
Metadatos del campo (nombre, tipo, interfaz, enumeración, etc.)ctx.collectionField
Colección de destino de la asociaciónctx.collectionField?.targetCollection

ctx.collection normalmente representa la colección vinculada al bloque actual; ctx.collectionField representa la definición del campo actual dentro de la colección. En escenarios como subtablas o campos de asociación, ambos pueden diferir.

#Notas

  • En escenarios como JSBlock o JSAction (sin vinculación a campos), ctx.collectionField suele ser undefined. Se recomienda utilizar el encadenamiento opcional (optional chaining) antes de acceder a él.
  • Si un campo JS personalizado no está vinculado a un campo de la colección, ctx.collectionField puede ser null.
  • targetCollection solo existe para campos de tipo asociación (ej. m2o, o2m, m2m); enum solo existe para campos con opciones como select o radioGroup.

#Relacionado

  • ctx.collection: Colección asociada al contexto actual
  • ctx.model: Modelo donde se encuentra el contexto de ejecución actual
  • ctx.blockModel: Bloque padre que contiene el JS actual
  • ctx.getValue(), ctx.setValue(): Leer y escribir el valor del campo actual