logologo
Start
Handbuch
Entwicklung
Plugins
API
Startseite
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Start
Handbuch
Entwicklung
Plugins
API
Startseite
logologo
RunJS Übersicht
Module importieren
Rendern im Container

Globale Variablen

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.off()
Next Pagectx.openView()
KI-Übersetzungshinweis

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

#ctx.on()

Abonnieren Sie Kontext-Ereignisse (wie Änderungen von Feldwerten, Eigenschaftsänderungen, Ressourcen-Aktualisierungen usw.) in RunJS. Ereignisse werden basierend auf ihrem Typ auf benutzerdefinierte DOM-Ereignisse an ctx.element oder interne Ereignisbus-Ereignisse von ctx.resource abgebildet.

#Anwendungsfälle

SzenarioBeschreibung
JSField / JSEditableFieldÜberwachen Sie Änderungen von Feldwerten aus externen Quellen (Formulare, Verknüpfungen usw.), um die Benutzeroberfläche synchron zu aktualisieren und eine bidirektionale Bindung zu erreichen.
JSBlock / JSItem / JSColumnÜberwachen Sie benutzerdefinierte Ereignisse auf dem Container, um auf Daten- oder Statusänderungen zu reagieren.
resource-bezogenÜberwachen Sie Lebenszyklus-Ereignisse von Ressourcen wie Aktualisierungen oder Speichervorgänge, um Logik nach Datenaktualisierungen auszuführen.

#Typdefinition

on(eventName: string, handler: (event?: any) => void): void;

#Häufige Ereignisse

EreignisnameBeschreibungEreignisquelle
js-field:value-changeFeldwert wurde extern geändert (z. B. Formularverknüpfung, Aktualisierung von Standardwerten)CustomEvent an ctx.element, wobei ev.detail der neue Wert ist
resource:refreshRessourcendaten wurden aktualisiertctx.resource Ereignisbus
resource:savedSpeichern der Ressource abgeschlossenctx.resource Ereignisbus

Regeln für die Ereigniszuordnung: Ereignisse mit dem Präfix resource: werden über ctx.resource.on verarbeitet, während andere in der Regel über DOM-Ereignisse an ctx.element (falls vorhanden) laufen.

#Beispiele

#Bidirektionale Bindung von Feldern (React useEffect + Bereinigung)

React.useEffect(() => {
  const handler = (ev) => setValue(ev?.detail ?? '');
  ctx.on?.('js-field:value-change', handler);
  return () => {
    ctx.off?.('js-field:value-change', handler);
  };
}, []);

#Natives DOM-Listening (Alternative, wenn ctx.on nicht verfügbar ist)

// Wenn ctx.on nicht bereitgestellt wird, kann ctx.element direkt verwendet werden
const handler = (ev) => {
  if (selectEl) selectEl.value = String(ev?.detail ?? '');
};
ctx.element?.addEventListener('js-field:value-change', handler);
// Bei der Bereinigung: ctx.element?.removeEventListener('js-field:value-change', handler);

#Benutzeroberfläche nach Ressourcen-Aktualisierung aktualisieren

ctx.resource?.on('refresh', () => {
  const data = ctx.resource?.getData?.();
  // Rendering basierend auf Daten aktualisieren
});

#Zusammenspiel mit ctx.off

  • Mit ctx.on registrierte Listener sollten zum geeigneten Zeitpunkt über ctx.off entfernt werden, um Speicherlecks oder doppelte Auslösungen zu vermeiden.
  • In React wird ctx.off normalerweise innerhalb der Bereinigungsfunktion von useEffect aufgerufen.
  • ctx.off existiert möglicherweise nicht; es wird empfohlen, Optional Chaining zu verwenden: ctx.off?.('eventName', handler).

#Hinweise

  1. Paarweise Aufhebung: Jedem ctx.on(eventName, handler) sollte ein entsprechendes ctx.off(eventName, handler) gegenüberstehen, wobei die übergebene handler-Referenz identisch sein muss.
  2. Lebenszyklus: Entfernen Sie Listener, bevor die Komponente unmountet oder der Kontext zerstört wird, um Speicherlecks zu verhindern.
  3. Verfügbarkeit von Ereignissen: Verschiedene Kontexttypen unterstützen unterschiedliche Ereignisse. Weitere Informationen finden Sie in der jeweiligen Komponentendokumentation.

#Verwandte Dokumentation

  • ctx.off – Ereignis-Listener entfernen
  • ctx.element – Rendering-Container und DOM-Ereignisse
  • ctx.resource – Ressourcen-Instanz und deren on/off
  • ctx.setValue – Feldwert setzen (löst js-field:value-change aus)