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.