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.collection
Next Pagectx.dataSource
Aviso de tradução por IA

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

#ctx.collectionField

A instância do campo da coleção (CollectionField) associada ao contexto de execução atual do RunJS, usada para acessar metadados do campo, tipos, regras de validação e informações de associação. Existe apenas quando o campo está vinculado a uma definição de coleção; campos personalizados/virtuais podem ser null.

#Cenários de Uso

CenárioDescrição
JSFieldRealizar vinculação ou validação em campos de formulário com base em interface, enum, targetCollection, etc.
JSItemAcessar metadados do campo correspondente à coluna atual em itens de sub-tabelas.
JSColumnSelecionar métodos de renderização com base em collectionField.interface ou acessar targetCollection em colunas de tabela.

Nota: ctx.collectionField está disponível apenas quando o campo está vinculado a uma definição de Coleção; geralmente é undefined em cenários como blocos independentes JSBlock ou eventos de ação sem vínculo de campo. Recomenda-se verificar valores nulos antes do uso.

#Definição de Tipo

collectionField: CollectionField | null | undefined;

#Propriedades Comuns

PropriedadeTipoDescrição
namestringNome do campo (ex: status, userId)
titlestringTítulo do campo (incluindo internacionalização)
typestringTipo de dado do campo (string, integer, belongsTo, etc.)
interfacestringTipo de interface do campo (input, select, m2o, o2m, m2m, etc.)
collectionCollectionA coleção à qual o campo pertence
targetCollectionCollectionA coleção de destino do campo de associação (apenas para tipos de associação)
targetstringNome da coleção de destino (para campos de associação)
enumarrayOpções de enumeração (select, radio, etc.)
defaultValueanyValor padrão
collectionNamestringNome da coleção à qual pertence
foreignKeystringNome do campo da chave estrangeira (belongsTo, etc.)
sourceKeystringChave de origem da associação (hasMany, etc.)
targetKeystringChave de destino da associação
fullpathstringCaminho completo (ex: main.users.status), usado para API ou referências de variáveis
resourceNamestringNome do recurso (ex: users.status)
readonlybooleanSe é apenas leitura
titleablebooleanSe pode ser exibido como um título
validationobjectConfiguração de regras de validação
uiSchemaobjectConfiguração de UI
targetCollectionTitleFieldCollectionFieldO campo de título da coleção de destino (para campos de associação)

#Métodos Comuns

MétodoDescrição
isAssociationField(): booleanSe é um campo de associação (belongsTo, hasMany, hasOne, belongsToMany, etc.)
isRelationshipField(): booleanSe é um campo de relacionamento (incluindo o2o, m2o, o2m, m2m, etc.)
getComponentProps(): objectObtém as props padrão do componente do campo
getFields(): CollectionField[]Obtém a lista de campos da coleção de destino (apenas campos de associação)
getFilterOperators(): object[]Obtém os operadores de filtro suportados por este campo (ex: $eq, $ne, etc.)

#Exemplos

#Renderização condicional baseada no tipo de campo

if (!ctx.collectionField) return null;
const { interface: iface } = ctx.collectionField;
if (['m2o', 'o2m', 'm2m'].includes(iface)) {
  // Campo de associação: exibe registros associados
  const target = ctx.collectionField.targetCollection;
  // ...
} else if (iface === 'select' || iface === 'radioGroup') {
  const options = ctx.collectionField.enum || [];
  // ...
}

#Determinar se é um campo de associação e acessar a coleção de destino

if (ctx.collectionField?.isAssociationField()) {
  const targetCol = ctx.collectionField.targetCollection;
  const titleField = targetCol?.titleCollectionField?.name;
  // Processar de acordo com a estrutura da coleção de destino
}

#Obter opções de enumeração

const options = ctx.collectionField?.enum ?? [];
const labels = options.map((o) => (typeof o === 'object' ? o.label : o));

#Renderização condicional baseada no modo apenas leitura/visualização

const { Input } = ctx.libs.antd;
if (ctx.collectionField?.readonly) {
  ctx.render(<span>{ctx.getValue?.() ?? '-'}</span>);
} else {
  ctx.render(<Input onChange={(e) => ctx.setValue?.(e.target.value)} />);
}

#Obter o campo de título da coleção de destino

// Ao exibir um campo de associação, use targetCollectionTitleField para obter o nome do campo de título
const titleField = ctx.collectionField?.targetCollectionTitleField;
const titleKey = titleField?.name ?? 'title';
const assocValue = ctx.getValue?.() ?? ctx.record?.[ctx.collectionField?.name];
const label = assocValue?.[titleKey];

#Relação com ctx.collection

NecessidadeUso Recomendado
Coleção do campo atualctx.collectionField?.collection ou ctx.collection
Metadados do campo (nome, tipo, interface, enum, etc.)ctx.collectionField
Coleção de destinoctx.collectionField?.targetCollection

ctx.collection geralmente representa a coleção vinculada ao bloco atual; ctx.collectionField representa a definição do campo atual na coleção. Em cenários como sub-tabelas ou campos de associação, os dois podem ser diferentes.

#Observações

  • Em cenários como JSBlock ou JSAction (sem vínculo de campo), ctx.collectionField geralmente é undefined. Recomenda-se usar encadeamento opcional (optional chaining) antes do acesso.
  • Se um campo JS personalizado não estiver vinculado a um campo de coleção, ctx.collectionField pode ser null.
  • targetCollection existe apenas para campos do tipo associação (ex: m2o, o2m, m2m); enum existe apenas para campos com opções como select ou radioGroup.

#Relacionado

  • ctx.collection: Coleção associada ao contexto atual
  • ctx.model: Modelo onde o contexto de execução atual está localizado
  • ctx.blockModel: Bloco pai que contém o JS atual
  • ctx.getValue(), ctx.setValue(): Ler e escrever o valor do campo atual