logologo
Inizio
Guida
Sviluppo
Plugin
API
Pagina iniziale
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Inizio
Guida
Sviluppo
Plugin
API
Pagina iniziale
logologo
Panoramica

Blocco

Panoramica

Blocco dati

Tabella
Modulo
Dettagli
Lista
Scheda a griglia
Grafico

Blocco filtro

Modulo

Altri blocchi

Pannello operativo
Iframe
Markdown
Blocco JS

Impostazioni del blocco

Ambito dati
Metodo di caricamento dati
Layout
Regole di collegamento dei blocchi
Regole di dipendenza dei campi
Regole di ordinamento
Ordinamento tramite trascinamento
Eliminazione blocco
Titolo del blocco
Altezza del blocco
Bozza del modulo

Campo

Panoramica

Opzioni di configurazione generale

Campo della tabella
Campi dei dettagli
Filtra campi del modulo
Campo del modulo

Elementi di configurazione specifici

Data
Gestore file
Sotto-modulo
Selettore a discesa
Selettore dati
Selettore a cascata
Sottotabella (modifica in riga)
Sottotabella (modifica in popup)
Sotto-dettagli
Titolo
Campo JS
Elemento JS
Colonna JS

Opzioni di configurazione del campo

Valore predefinito
Etichetta del campo
Mostra etichetta
Messaggio di suggerimento del campo
Ambito dati
Componente del campo
Formattazione numerica
Modalità
Obbligatorio
Campo titolo
Regole di validazione
Componente campo relazione

Operazione

Panoramica

Elementi di configurazione dell'operazione

Pulsante di modifica
Doppia conferma
Assegnazione del campo
Associa workflow
Popup di modifica
Regole di interazione dell'operazione

Tipo di operazione

Aggiungi
Visualizza
Elimina
Modifica
Copia
Importa
Importa Pro
Esporta
Esporta Pro
Esporta allegati
Filtra
Link
Apri popup
Aggiorna
Invia dati
Attiva workflow
Registro aggiornamenti
Aggiornamento di massa
Modifica di massa
Aggiungi record secondario
Azione JS
Permessi operativi

Avanzato

Regole di concatenazione
Flusso di eventi
Variabile
RunJS
Modello UI
Previous PageElemento JS
Next PageValore predefinito
Avviso di traduzione IA

Questo documento è stato tradotto dall'IA. Per informazioni accurate, consultare la versione inglese.

#JS Column

#Introduzione

La JS Column viene utilizzata per le "colonne personalizzate" nelle tabelle e permette di renderizzare il contenuto di ogni cella di riga tramite JavaScript. Non è vincolata a un campo specifico ed è ideale per scenari come colonne derivate, visualizzazioni combinate tra più campi, badge di stato, pulsanti di azione e aggregazione di dati remoti.

jscolumn-add-20251029

#API di contesto in fase di esecuzione

Quando ogni cella della JS Column viene renderizzata, sono disponibili le seguenti API di contesto:

  • ctx.element: Il contenitore DOM della cella corrente (ElementProxy), che supporta innerHTML, querySelector, addEventListener, ecc.
  • ctx.record: L'oggetto record della riga corrente (sola lettura).
  • ctx.recordIndex: L'indice della riga all'interno della pagina corrente (parte da 0, potrebbe essere influenzato dalla paginazione).
  • ctx.collection: I metadati della collezione associata alla tabella (sola lettura).
  • ctx.requireAsync(url): Carica in modo asincrono una libreria AMD/UMD tramite URL.
  • ctx.importAsync(url): Importa dinamicamente un modulo ESM tramite URL.
  • ctx.openView(options): Apre una vista configurata (modale/drawer/pagina).
  • ctx.i18n.t() / ctx.t(): Internazionalizzazione.
  • ctx.onRefReady(ctx.ref, cb): Esegue il rendering dopo che il contenitore è pronto.
  • ctx.libs.React / ctx.libs.ReactDOM / ctx.libs.antd / ctx.libs.antdIcons / ctx.libs.dayjs / ctx.libs.lodash / ctx.libs.math / ctx.libs.formula: Librerie integrate come React, ReactDOM, Ant Design, icone di Ant Design, dayjs, lodash, math.js e formula.js, utili per il rendering JSX, la gestione di date/ore, la manipolazione dei dati e le operazioni matematiche. (ctx.React / ctx.ReactDOM / ctx.antd sono mantenute per compatibilità.)
  • ctx.render(vnode): Esegue il rendering di un elemento React/HTML/DOM nel contenitore predefinito ctx.element (la cella corrente). Renderizzazioni multiple riutilizzeranno il Root e sovrascriveranno il contenuto esistente del contenitore.

#Editor e Snippet

L'editor di script della JS Column supporta l'evidenziazione della sintassi, i suggerimenti di errore e i frammenti di codice (Snippets) integrati.

  • Snippets: Apre l'elenco dei frammenti di codice integrati, permettendo di cercarli e inserirli con un clic nella posizione corrente del cursore.
  • Run: Esegue direttamente il codice corrente. Il log di esecuzione viene visualizzato nel pannello Logs in basso, supportando console.log/info/warn/error e l'evidenziazione degli errori.

jscolumn-toolbars-20251029

È anche possibile utilizzare un AI Employee per generare codice:

  • AI Employee · Nathan: Ingegnere Frontend

#Usi comuni

#1) Rendering di base (Lettura del record della riga corrente)

ctx.render(<span className="nb-js-col-name">{ctx.record?.name ?? '-'}</span>);

#2) Utilizzo di JSX per il rendering di componenti React

const { Tag } = ctx.libs.antd;
const status = ctx.record?.status ?? 'unknown';
const color = status === 'active' ? 'green' : status === 'blocked' ? 'red' : 'default';
ctx.render(
  <div style={{ padding: 4 }}>
    <Tag color={color}>{String(status)}</Tag>
  </div>
);

#3) Apertura di un modale/drawer da una cella (Visualizzazione/Modifica)

const tk = ctx.collection?.getFilterByTK?.(ctx.record);
ctx.render(
  <a onClick={async () => {
    await ctx.openView('target-view-uid', {
      navigation: false,
      mode: 'drawer',
      dataSourceKey: ctx.collection?.dataSourceKey,
      collectionName: ctx.collection?.name,
      filterByTk: tk,
    });
  }}>Visualizza</a>
);

#4) Caricamento di librerie di terze parti (AMD/UMD o ESM)

// AMD/UMD
const _ = await ctx.requireAsync('https://cdn.jsdelivr.net/npm/lodash@4/lodash.min.js');
const items = _.take(Object.keys(ctx.record || {}), 3);
ctx.render(<code>{items.join(', ')}</code>);

// ESM
const { default: dayjs } = await ctx.importAsync('https://cdn.jsdelivr.net/npm/dayjs/+esm');
ctx.render(<span>{dayjs().format('YYYY-MM-DD')}</span>);

#Note

  • Si consiglia di utilizzare un CDN affidabile per il caricamento di librerie esterne e di prevedere un fallback per gli scenari di errore (ad esempio, if (!lib) return;).
  • Si raccomanda di utilizzare selettori class o [name=...] anziché id fissi, per evitare duplicati di id in blocchi o modali multipli.
  • Pulizia degli eventi: Le righe della tabella possono cambiare dinamicamente con la paginazione o l'aggiornamento, causando il rendering multiplo delle celle. È opportuno pulire o deduplicare i listener di eventi prima di associarli, per evitare attivazioni ripetute.
  • Suggerimento per le prestazioni: Evitate di caricare ripetutamente librerie di grandi dimensioni in ogni cella. È preferibile memorizzare nella cache la libreria a un livello superiore (ad esempio, tramite variabili globali o a livello di tabella) e riutilizzarla.