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.filterManager
Next Pagectx.getModel()
Aviso de tradução por IA

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

#ctx.form

A instância do Ant Design Form dentro do bloco atual, usada para ler/escrever campos de formulário, disparar validação e submissão. É equivalente a ctx.blockModel?.form e pode ser usada diretamente em blocos relacionados a formulários (Formulário, Formulário de Edição, Subformulário, etc.).

#Casos de Uso

CenárioDescrição
JSFieldLer/escrever outros campos do formulário para implementar vinculação (linkage), ou realizar cálculos e validações baseados em outros valores de campos.
JSItemLer/escrever campos da mesma linha ou outros campos em itens de sub-tabelas para obter vinculação dentro da tabela.
JSColumnLer os valores da linha atual ou de campos associados em uma coluna de tabela para renderização.
Ações de Formulário / Fluxo de TrabalhoValidação pré-submissão, atualização de campos em lote, redefinição de formulários, etc.

Nota: ctx.form está disponível apenas em contextos RunJS relacionados a blocos de formulário (Formulário, Formulário de Edição, Subformulário, etc.). Ele pode não existir em cenários que não sejam de formulário (como JSBlocks independentes ou blocos de Tabela). Recomenda-se realizar uma verificação de valor nulo antes do uso: ctx.form?.getFieldsValue().

#Definição de Tipo

form: FormInstance<any>;

FormInstance é o tipo de instância do Ant Design Form. Os métodos comuns são os seguintes.

#Métodos Comuns

#Lendo Valores do Formulário

// Lê os valores dos campos atualmente registrados (por padrão, apenas campos renderizados)
const values = ctx.form.getFieldsValue();

// Lê os valores de todos os campos (incluindo campos registrados mas não renderizados, ex: ocultos ou dentro de seções colapsadas)
const allValues = ctx.form.getFieldsValue(true);

// Lê um único campo
const email = ctx.form.getFieldValue('email');

// Lê campos aninhados (ex: em uma sub-tabela)
const amount = ctx.form.getFieldValue(['orders', 0, 'amount']);

#Escrevendo Valores no Formulário

// Atualização em lote (comumente usada para vinculação/linkage)
ctx.form.setFieldsValue({
  status: 'active',
  updatedAt: new Date(),
});

// Atualiza um único campo
ctx.form.setFieldValue('remark', 'Observação atualizada');

#Validação e Submissão

// Dispara a validação do formulário
await ctx.form.validateFields();

// Dispara a submissão do formulário
ctx.form.submit();

#Redefinição (Reset)

// Redefine todos os campos
ctx.form.resetFields();

// Redefine apenas campos específicos
ctx.form.resetFields(['status', 'remark']);

#Relação com Contextos Relacionados

#ctx.getValue / ctx.setValue

CenárioUso Recomendado
Ler/Escrever campo atualctx.getValue() / ctx.setValue(v)
Ler/Escrever outros camposctx.form.getFieldValue(name) / ctx.form.setFieldValue(name, v)

Dentro do campo JS atual, priorize o uso de getValue/setValue para ler/escrever o próprio campo; use ctx.form quando precisar acessar outros campos.

#ctx.blockModel

NecessidadeUso Recomendado
Ler/Escrever campos de formulárioctx.form (Equivalente a ctx.blockModel?.form, mais conveniente)
Acessar bloco paictx.blockModel (Contém coleção, recurso, etc.)

#ctx.getVar('ctx.formValues')

Os valores do formulário devem ser obtidos via await ctx.getVar('ctx.formValues') e não são expostos diretamente como ctx.formValues. Em um contexto de formulário, é preferível usar ctx.form.getFieldsValue() para ler os valores mais recentes em tempo real.

#Observações

  • getFieldsValue() retorna apenas campos renderizados por padrão. Para incluir campos não renderizados (ex: em seções colapsadas ou ocultos por regras condicionais), passe true: getFieldsValue(true).
  • Caminhos para campos aninhados, como sub-tabelas, são arrays, ex: ['orders', 0, 'amount']. Você pode usar ctx.namePath para obter o caminho do campo atual e construir caminhos para outras colunas na mesma linha.
  • validateFields() lança um objeto de erro contendo errorFields e outras informações. Se a validação falhar antes da submissão, você pode usar ctx.exit() para interromper as etapas subsequentes.
  • Em cenários assíncronos, como fluxos de trabalho ou regras de vinculação, o ctx.form pode ainda não estar pronto. Recomenda-se usar encadeamento opcional (optional chaining) ou verificações de nulo.

#Exemplos

#Vinculação de Campo: Exibir conteúdo diferente com base no tipo

const type = ctx.form.getFieldValue('type');
if (type === 'vip') {
  ctx.form.setFieldsValue({ discount: 0.8 });
} else {
  ctx.form.setFieldsValue({ discount: 1 });
}

#Calcular campo atual com base em outros campos

const quantity = ctx.form.getFieldValue('quantity') ?? 0;
const price = ctx.form.getFieldValue('price') ?? 0;
ctx.setValue(quantity * price);

#Ler/Escrever outras colunas na mesma linha dentro de uma sub-tabela

// ctx.namePath é o caminho do campo atual no formulário, ex: ['orders', 0, 'amount']
// Ler 'status' na mesma linha: ['orders', 0, 'status']
const rowIndex = ctx.namePath?.[1];
const status = ctx.form.getFieldValue(['orders', rowIndex, 'status']);

#Validação Pré-submissão

try {
  await ctx.form.validateFields();
  // Validação passou, continuar com a lógica de submissão
} catch (e) {
  ctx.message.error('Por favor, verifique os campos do formulário');
  ctx.exit();
}

#Submeter após Confirmação

const confirmed = await ctx.modal.confirm({
  title: 'Confirmar Submissão',
  content: 'Você não poderá modificar isso após a submissão. Continuar?',
  okText: 'Confirmar',
  cancelText: 'Cancelar',
});
if (confirmed) {
  await ctx.form.validateFields();
  ctx.form.submit();
} else {
  ctx.exit(); // Interrompe se o usuário cancelar
}

#Relacionados

  • ctx.getValue() / ctx.setValue(): Ler e escrever o valor do campo atual.
  • ctx.blockModel: Modelo do bloco pai; ctx.form é equivalente a ctx.blockModel?.form.
  • ctx.modal: Diálogos de confirmação, frequentemente usados com ctx.form.validateFields() e ctx.form.submit().
  • ctx.exit(): Interrompe o processo em caso de falha na validação ou cancelamento do usuário.
  • ctx.namePath: O caminho (array) do campo atual no formulário, usado para construir nomes para getFieldValue / setFieldValue em campos aninhados.