KI-Übersetzungshinweis

Dieses Dokument wurde von KI übersetzt. Für genaue Informationen lesen Sie bitte die englische Version.

JS Item

Einführung

JS Item wird für „Benutzerdefinierte Elemente“ in Formularen verwendet (keine Feldbindung). Sie können JavaScript/JSX verwenden, um beliebige Inhalte zu rendern (Hinweise, Statistiken, Vorschauen, Schaltflächen usw.) und mit dem Formular- und Datensatz-Kontext zu interagieren. Es eignet sich für Szenarien wie Echtzeit-Vorschauen, Erläuterungshinweise, kleine interaktive Komponenten und Ähnliches.

jsitem-add-20251929

Laufzeit-Kontext-API (häufig verwendet)

  • ctx.element: DOM-Container des aktuellen Elements (ElementProxy), unterstützt innerHTML, querySelector, addEventListener usw.;
  • ctx.form: AntD Form-Instanz, ermöglicht getFieldValue / getFieldsValue / setFieldsValue / validateFields usw.;
  • ctx.blockModel: Modell des Formularblocks, in dem es sich befindet; kann formValuesChange überwachen, um Verknüpfungen zu implementieren;
  • ctx.record / ctx.collection: Aktueller Datensatz und Metainformationen der Sammlung (in einigen Szenarien verfügbar);
  • ctx.requireAsync(url): Lädt AMD/UMD-Bibliotheken asynchron per URL;
  • ctx.importAsync(url): Importiert ESM-Module dynamisch per URL;
  • ctx.openView(viewUid, options): Öffnet eine konfigurierte Ansicht (Schublade/Dialog/Seite);
  • ctx.message / ctx.notification: Globale Hinweise und Benachrichtigungen;
  • ctx.t() / ctx.i18n.t(): Internationalisierung;
  • ctx.onRefReady(ctx.ref, cb): Rendert erst, wenn der Container bereit ist;
  • ctx.libs.React / ctx.libs.ReactDOM / ctx.libs.antd / ctx.libs.antdIcons / ctx.libs.dayjs / ctx.libs.lodash / ctx.libs.math / ctx.libs.formula: Integrierte Bibliotheken wie React / ReactDOM / Ant Design / Ant Design Icons / dayjs / lodash / math.js / formula.js für JSX-Rendering, Zeitverarbeitung, Datenoperationen und mathematische Berechnungen. (ctx.React / ctx.ReactDOM / ctx.antd bleiben zur Kompatibilität erhalten.)
  • ctx.render(vnode): Rendert React-Elemente/HTML/DOM in den Standard-Container ctx.element; bei mehrfachem Rendern wird die Root wiederverwendet und der vorhandene Inhalt des Containers überschrieben.

Editor und Snippets

  • Snippets: Öffnet eine Liste integrierter Code-Fragmente, die gesucht und mit einem Klick an der aktuellen Cursorposition eingefügt werden können.
  • Run: Führt den aktuellen Code direkt aus und gibt die Protokolle im unteren Bereich Logs aus; unterstützt console.log/info/warn/error und Fehlerhervorhebung.

jsitem-toolbars-20251029

Häufige Verwendung (vereinfachte Beispiele)

1) Echtzeit-Vorschau (Formularwerte lesen)

const render = () => {
  const { price = 0, quantity = 1, discount = 0 } = ctx.form.getFieldsValue();
  const total = Number(price) * Number(quantity);
  const final = total * (1 - Number(discount || 0));
  ctx.render(
    <div style={{ padding: 8, background: '#f6ffed', border: '1px solid #b7eb8f', borderRadius: 6 }}>
      <div style={{ fontWeight: 600, color: '#389e0d' }}>{ctx.t('Payable:')} ¥{(final || 0).toFixed(2)}</div>
    </div>
  );
};
render();
ctx.blockModel?.on?.('formValuesChange', () => render());

2) Ansicht öffnen (Schublade)

ctx.render(
  <a onClick={async () => {
    const popupUid = ctx.model.uid + '-preview';
    await ctx.openView(popupUid, { mode: 'drawer', title: ctx.t('Preview'), size: 'large' });
  }}>
    {ctx.t('Open preview')}
  </a>
);

3) Externe Bibliotheken laden und rendern

// AMD/UMD
const dayjs = await ctx.requireAsync('https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js');
ctx.render(<span>{dayjs().format('YYYY-MM-DD HH:mm')}</span>);

// ESM
const { default: he } = await ctx.importAsync('https://cdn.jsdelivr.net/npm/he/+esm');
ctx.render(<span>{he.encode(String(ctx.form.getFieldValue('title') ?? ''))}</span>);

Hinweise

  • Das Laden externer Bibliotheken sollte über vertrauenswürdige CDNs erfolgen; für Fehlerfälle sollten Rückfalloptionen vorgesehen werden (z. B. if (!lib) return;).
  • Bei Selektoren sollten bevorzugt class oder [name=...] verwendet werden; vermeiden Sie feste ids, um doppelte ids in mehreren Blöcken/Popups zu verhindern.
  • Ereignisbereinigung: Häufige Änderungen der Formularwerte lösen mehrfaches Rendern aus; vor dem Binden von Ereignissen sollten diese bereinigt oder dedupliziert werden (z. B. erst remove, dann add, oder { once: true }, oder Markierung per dataset zur Vermeidung von Duplikaten).

Verwandte Dokumentation