logologo
Começar
Manual
Desenvolvimento
Plugins
API
Início
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Começar
Manual
Desenvolvimento
Plugins
API
Início
logologo
Visão geral do RunJS
Importando módulos
Renderização no contêiner

Variáveis globais

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.t()
Aviso de tradução por IA

Este documento foi traduzido por IA. Para informações precisas, consulte a versão em inglês.

#ctx.view

O controlador da visualização (view) atualmente ativa (janela modal, gaveta, popover, área incorporada, etc.), usado para acessar informações e operações em nível de visualização. Fornecido pelo FlowViewContext, ele está disponível apenas dentro do conteúdo de visualizações abertas via ctx.viewer ou ctx.openView.

#Casos de Uso

CenárioDescrição
Conteúdo de Janela Modal/GavetaUse ctx.view.close() dentro do content para fechar a visualização atual, ou use Header e Footer para renderizar títulos e rodapés.
Após o envio do formulárioChame ctx.view.close(result) após um envio bem-sucedido para fechar a visualização e retornar o resultado.
JSBlock / AçãoDetermine o tipo de visualização atual via ctx.view.type ou leia os parâmetros de abertura em ctx.view.inputArgs.
Seleção de Associação, SubtabelasLeia collectionName, filterByTk, parentId, etc., de inputArgs para o carregamento de dados.

Nota: ctx.view está disponível apenas em ambientes RunJS com um contexto de visualização (por exemplo, dentro do content de ctx.viewer.dialog(), em formulários de janela modal ou dentro de seletores de associação). Em páginas comuns ou contextos de backend, ele é undefined. Recomenda-se usar encadeamento opcional (ctx.view?.close?.()).

#Definição de Tipo

type FlowView = {
  type: 'drawer' | 'popover' | 'dialog' | 'embed';
  inputArgs: Record<string, any>;
  Header: React.FC<{ title?: React.ReactNode; extra?: React.ReactNode }> | null;
  Footer: React.FC<{ children?: React.ReactNode }> | null;
  close: (result?: any, force?: boolean) => void;
  update: (newConfig: any) => void;
  navigation?: ViewNavigation;
  destroy?: () => void;
  submit?: () => Promise<any>;  // Disponível em visualizações de configuração de fluxo de trabalho
};

#Propriedades e Métodos Comuns

Propriedade/MétodoTipoDescrição
type'drawer' | 'popover' | 'dialog' | 'embed'Tipo de visualização atual
inputArgsRecord<string, any>Parâmetros passados ao abrir a visualização (veja abaixo)
HeaderReact.FC | nullComponente de cabeçalho, usado para renderizar títulos e áreas de ação
FooterReact.FC | nullComponente de rodapé, usado para renderizar botões, etc.
close(result?, force?)voidFecha a visualização atual; o result pode ser retornado para quem a chamou
update(newConfig)voidAtualiza a configuração da visualização (ex: largura, título)
navigationViewNavigation | undefinedNavegação de visualização na página, incluindo troca de abas, etc.

Atualmente, apenas dialog (janela modal) e drawer (gaveta) suportam Header e Footer.

#Campos comuns em inputArgs

Os campos em inputArgs variam dependendo do cenário de abertura. Campos comuns incluem:

CampoDescrição
viewUidUID da visualização
collectionNameNome da coleção
filterByTkFiltro por chave primária (para detalhes de um único registro)
parentIdID pai (para cenários de associação)
sourceIdID do registro de origem
parentItemDados do item pai
sceneCenário (ex: create, edit, select)
onChangeCallback após seleção ou alteração
tabUidUID da aba atual (dentro de uma página)

Acesse-os via ctx.getVar('ctx.view.inputArgs.xxx') ou ctx.view.inputArgs.xxx.

#Exemplos

#Fechando a visualização atual

// Fecha a janela modal após o envio bem-sucedido
await ctx.resource.runAction('create', { data: formData });
ctx.view?.close();

// Fecha e retorna resultados
ctx.view?.close({ id: newRecord.id, name: newRecord.name });

#Usando Header / Footer no conteúdo

function DialogContent() {
  const ctx = useFlowViewContext();
  const { Header, Footer, close } = ctx.view;
  return (
    <div>
      <Header title="Editar" extra={<Button size="small">Ajuda</Button>} />
      <div>Conteúdo do formulário...</div>
      <Footer>
        <Button onClick={() => close()}>Cancelar</Button>
        <Button type="primary" onClick={handleSubmit}>Enviar</Button>
      </Footer>
    </div>
  );
}

#Ramificação baseada no tipo de visualização ou inputArgs

if (ctx.view?.type === 'embed') {
  // Oculta o cabeçalho em visualizações incorporadas
  ctx.model.setProps('headerStyle', { display: 'none' });
}

const collectionName = ctx.view?.inputArgs?.collectionName;
if (collectionName === 'users') {
  // Cenário de seletor de usuários
}

#Relação com ctx.viewer e ctx.openView

FinalidadeUso recomendado
Abrir uma nova visualizaçãoctx.viewer.dialog() / ctx.viewer.drawer() ou ctx.openView()
Operar na visualização atualctx.view.close(), ctx.view.update()
Obter parâmetros de aberturactx.view.inputArgs

O ctx.viewer é responsável por "abrir" uma visualização, enquanto o ctx.view representa a instância da visualização "atual". O ctx.openView é usado para abrir visualizações de fluxo de trabalho pré-configuradas.

#Observações

  • ctx.view está disponível apenas dentro de uma visualização; ele é undefined em páginas comuns.
  • Use encadeamento opcional: ctx.view?.close?.() para evitar erros quando não houver contexto de visualização.
  • O result de close(result) é passado para a Promise retornada por ctx.viewer.open().

#Relacionados

  • ctx.openView(): Abre uma visualização de fluxo de trabalho pré-configurada
  • ctx.modal: Popups leves (informações, confirmação, etc.)

O ctx.viewer fornece métodos como dialog(), drawer(), popover() e embed() para abrir visualizações. O content aberto por esses métodos pode acessar o ctx.view.