Aviso de traducción IA

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

ctx.getModel()

Obtiene una instancia de modelo (como BlockModel, PageModel, ActionModel, etc.) del motor actual o de la pila de vistas basándose en el uid del modelo. Se utiliza en RunJS para acceder a otros modelos a través de bloques, páginas o ventanas emergentes.

Si solo necesita el modelo o bloque donde se encuentra el contexto de ejecución actual, priorice el uso de ctx.model o ctx.blockModel en lugar de ctx.getModel.

Escenarios de uso

EscenarioDescripción
JSBlock / JSActionObtener modelos de otros bloques basados en un uid conocido para leer o escribir en su resource, form, setProps, etc.
RunJS en ventanas emergentesCuando necesite acceder a un modelo en la página que abrió la ventana emergente, pase searchInPreviousEngines: true.
Acciones personalizadasLocalizar formularios o submodelos en el panel de configuración por uid a través de las pilas de vistas para leer su configuración o estado.

Definición de tipos

getModel<T extends FlowModel = FlowModel>(
  uid: string,
  searchInPreviousEngines?: boolean
): T | undefined

Parámetros

ParámetroTipoDescripción
uidstringEl identificador único de la instancia del modelo objetivo, especificado durante la configuración o creación (por ejemplo, ctx.model.uid).
searchInPreviousEnginesbooleanOpcional, por defecto es false. Cuando es true, busca desde el motor actual hacia arriba hasta la raíz en la "pila de vistas", permitiendo el acceso a modelos en motores de nivel superior (por ejemplo, la página que abrió una ventana emergente).

Valor de retorno

  • Devuelve la instancia de la subclase FlowModel correspondiente (por ejemplo, BlockModel, FormBlockModel, ActionModel) si se encuentra.
  • Devuelve undefined si no se encuentra.

Alcance de búsqueda

  • Por defecto (searchInPreviousEngines: false): Busca solo dentro del motor actual por uid. En ventanas emergentes o vistas de varios niveles, cada vista tiene un motor independiente; por defecto, solo busca modelos dentro de la vista actual.
  • searchInPreviousEngines: true: Busca hacia arriba a lo largo de la cadena previousEngine comenzando desde el motor actual, devolviendo la primera coincidencia. Esto es útil para acceder a un modelo en la página que abrió la ventana emergente actual.

Ejemplos

Obtener otro bloque y refrescar

const block = ctx.getModel('list-block-uid');
if (block?.resource) {
  await block.resource.refresh();
}

Acceder a un modelo en la página desde una ventana emergente

// Acceder a un bloque en la página que abrió la ventana emergente actual
const pageBlock = ctx.getModel('page-block-uid', true);
if (pageBlock) {
  pageBlock.rerender?.();
}

Lectura/escritura entre modelos y activar rerender

const target = ctx.getModel('other-block-uid');
if (target) {
  target.setProps({ loading: true });
  target.rerender?.();
}

Verificación de seguridad

const model = ctx.getModel(someUid);
if (!model) {
  ctx.message.warning('El modelo objetivo no existe');
  return;
}

Relacionado

  • ctx.model: El modelo donde se encuentra el contexto de ejecución actual.
  • ctx.blockModel: El modelo del bloque padre donde se encuentra el JS actual; generalmente accesible sin necesidad de getModel.