Construir um componente de campo personalizado
No NocoBase, os componentes de campo são usados em tabelas e formulários para exibir e editar dados. Este exemplo mostra como criar um componente de exibição de campo personalizado com ClickableFieldModel — que adiciona colchetes [] em torno do valor do campo e o vincula à interface de campo do tipo input.
É recomendável conhecer os seguintes tópicos antes:
- Escreva seu primeiro plugin — criação do plugin e estrutura de diretórios
- Plugin — entrada do plugin e ciclo de vida
load() - Visão geral do FlowEngine — uso básico do FlowModel
- FlowEngine → Extensão de campos — apresentação das classes base FieldModel e ClickableFieldModel
- i18n internacionalização — escrita de arquivos de tradução e uso de
tExpr()para tradução adiada
Resultado final
Vamos criar um componente personalizado de exibição de campo:
- Herda
ClickableFieldModel, com lógica de renderização personalizada - Mostra o valor do campo entre
[] - Vincula-se ao tipo de campo
input(texto de linha única) combindModelToInterface
Após ativar o plugin, em um bloco de tabela encontre uma coluna do tipo texto de linha única, clique no botão de configuração da coluna e, no menu suspenso "Componente de campo", você verá a opção DisplaySimpleFieldModel. Após trocar, o valor da coluna será exibido no formato [value].
O código-fonte completo está em @nocobase-example/plugin-field-simple. Se quiser executar localmente para ver o resultado:
A seguir, montamos esse plugin do zero, passo a passo.
Passo 1: criar o esqueleto do plugin
Na raiz do repositório, execute:
Para mais detalhes, veja Escreva seu primeiro plugin.
Passo 2: criar o modelo de campo
Crie src/client-v2/models/DisplaySimpleFieldModel.tsx. Este é o núcleo do plugin — define como o campo é renderizado e a qual tipo de interface de campo ele se vincula.
Pontos-chave:
renderComponent(value)— recebe o valor atual do campo como parâmetro e retorna o JSX renderizadothis.context.record— obtém o registro completo da linha atualthis.context.recordIndex— obtém o índice da linha atualClickableFieldModel— herda deFieldModel, com capacidade de interação por cliquedefine({ label })— define o nome exibido no menu suspenso "Componente de campo"; sem isso, o nome da classe é exibido diretamenteDisplayItemModel.bindModelToInterface()— vincula o modelo de campo a um tipo de interface específico (por exemplo,inputrepresenta campos de texto de linha única). Assim, em campos do tipo correspondente, esse componente de exibição estará disponível para seleção
Passo 3: adicionar arquivos multilíngues
Edite os arquivos de tradução em src/locale/ do plugin, adicionando as chaves usadas em tExpr():
Adicionar um novo arquivo de idioma pela primeira vez requer reiniciar a aplicação para ter efeito.
Para mais informações sobre escrita de arquivos de tradução e uso de tExpr(), veja i18n internacionalização.
Passo 4: registrar no plugin
Edite src/client-v2/plugin.tsx e use registerModelLoaders para carregar o modelo sob demanda:
Passo 5: ativar o plugin
Após ativar, em um bloco de tabela encontre uma coluna do tipo texto de linha única, clique no botão de configuração da coluna e, no menu suspenso "Componente de campo", troque para esse componente de exibição personalizado.
Código-fonte completo
- @nocobase-example/plugin-field-simple — exemplo completo de componente de campo personalizado
Resumo
Capacidades usadas neste exemplo:
Links relacionados
- Escreva seu primeiro plugin — criar o esqueleto do plugin do zero
- Visão geral do FlowEngine — uso básico do FlowModel
- FlowEngine → Extensão de campos — FieldModel, ClickableFieldModel, bindModelToInterface
- FlowEngine → Extensão de blocos — blocos personalizados
- Component vs FlowModel — quando usar FlowModel
- Plugin — entrada do plugin e ciclo de vida load()
- i18n internacionalização — escrita de arquivos de tradução e uso de tExpr
- Documentação completa do FlowEngine — referência completa de FlowModel, Flow e Context

