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.on()
Next Pagectx.render()
Aviso de traducción IA

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

#ctx.openView()

Abre de forma programática una vista especificada (cajón, diálogo, página incrustada, etc.). Proporcionado por FlowModelContext, se utiliza para abrir vistas configuradas de ChildPage o PopupAction en escenarios como JSBlock, celdas de tabla y flujos de trabajo.

#Escenarios de uso

EscenarioDescripción
JSBlockAbrir un diálogo de detalle o edición tras hacer clic en un botón, pasando el filterByTk de la fila actual.
Celda de tablaRenderizar un botón dentro de una celda que abre un diálogo de detalle de fila al hacer clic.
Flujo de trabajo / JSActionAbrir la siguiente vista o un diálogo después de una operación exitosa.
Campo de asociaciónAbrir un diálogo de selección o edición a través de ctx.runAction('openView', params).

Nota: ctx.openView está disponible en un entorno RunJS donde exista un contexto de FlowModel. Si el modelo correspondiente al uid no existe, se creará y persistirá automáticamente un PopupActionModel.

#Firma

openView(uid: string, options?: OpenViewOptions): Promise<void>

#Parámetros

#uid

El identificador único del modelo de vista. Si no existe, se creará y guardará automáticamente. Se recomienda usar un UID estable, como ${ctx.model.uid}-detail, para que la configuración pueda reutilizarse al abrir el mismo diálogo varias veces.

#Campos comunes de options

CampoTipoDescripción
modedrawer / dialog / embedMétodo de apertura: cajón (drawer), diálogo (dialog) o incrustado (embed). Por defecto es drawer.
sizesmall / medium / largeTamaño del diálogo o cajón. Por defecto es medium.
titlestringTítulo de la vista.
paramsRecord<string, any>Parámetros arbitrarios pasados a la vista.
filterByTkanyValor de la clave primaria, utilizado para escenarios de detalle o edición de un solo registro.
sourceIdstringID del registro de origen, utilizado en escenarios de asociación.
dataSourceKeystringFuente de datos.
collectionNamestringNombre de la colección.
associationNamestringNombre del campo de asociación.
navigationbooleanIndica si se debe usar la navegación por rutas. Si se proporcionan defineProperties o defineMethods, se establece forzosamente en false.
preventClosebooleanIndica si se debe evitar el cierre.
definePropertiesRecord<string, PropertyOptions>Inyecta dinámicamente propiedades en el modelo dentro de la vista.
defineMethodsRecord<string, Function>Inyecta dinámicamente métodos en el modelo dentro de la vista.

#Ejemplos

#Uso básico: Abrir un cajón (drawer)

const popupUid = `${ctx.model.uid}-detail`;
await ctx.openView(popupUid, {
  mode: 'drawer',
  size: 'medium',
  title: ctx.t('Detalles'),
});

#Pasar el contexto de la fila actual

const primaryKey = ctx.collection?.primaryKey || 'id';
await ctx.openView(`${ctx.model.uid}-1`, {
  mode: 'dialog',
  title: ctx.t('Detalles de la fila'),
  params: {
    filterByTk: ctx.record?.[primaryKey],
    record: ctx.record,
  },
});

#Abrir a través de runAction

Cuando un modelo está configurado con una acción openView (como campos de asociación o campos clicables), usted puede llamar a:

await ctx.runAction('openView', {
  navigation: false,
  mode: 'dialog',
  collectionName: 'users',
  filterByTk: ctx.record?.id,
});

#Inyectar contexto personalizado

await ctx.openView(`${ctx.model.uid}-edit`, {
  mode: 'drawer',
  filterByTk: ctx.record?.id,
  defineProperties: {
    onSaved: {
      get: () => () => ctx.resource?.refresh?.(),
      cache: false,
    },
  },
});

#Relación con ctx.viewer y ctx.view

PropósitoUso recomendado
Abrir una vista de flujo configuradactx.openView(uid, options)
Abrir contenido personalizado (sin flujo)ctx.viewer.dialog() / ctx.viewer.drawer()
Operar en la vista abierta actualmentectx.view.close(), ctx.view.inputArgs

ctx.openView abre una FlowPage (ChildPageModel), que renderiza internamente una página de flujo completa; ctx.viewer abre contenido arbitrario de React.

#Notas

  • Se recomienda asociar el uid con ctx.model.uid (por ejemplo, ${ctx.model.uid}-xxx) para evitar conflictos entre múltiples bloques.
  • Cuando se pasan defineProperties o defineMethods, navigation se fuerza a false para evitar la pérdida de contexto tras una actualización.
  • Dentro del diálogo, ctx.view se refiere a la instancia de la vista actual, y ctx.view.inputArgs se puede usar para leer los parámetros pasados durante la apertura.

#Relacionado

  • ctx.view: La instancia de la vista abierta actualmente.
  • ctx.model: El modelo actual, utilizado para construir un popupUid estable.