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.collection
Next Pagectx.dataSource
KI-Übersetzungshinweis

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

#ctx.collectionField

Die Instanz des Datentabellenfeldes (CollectionField), die mit dem aktuellen RunJS-Ausführungskontext verknüpft ist. Sie wird verwendet, um auf Metadaten, Typen, Validierungsregeln und Verknüpfungsinformationen des Feldes zuzugreifen. Sie existiert nur, wenn das Feld an eine Definition einer Sammlung gebunden ist; benutzerdefinierte oder virtuelle Felder können null sein.

#Anwendungsbereiche

SzenarioBeschreibung
JSFieldDurchführung von Verknüpfungen oder Validierungen in Formularfeldern basierend auf interface, enum, targetCollection usw.
JSItemZugriff auf Metadaten des Feldes, das der aktuellen Spalte in Untertabellen-Elementen entspricht.
JSColumnAuswahl der Darstellungsmethode basierend auf collectionField.interface oder Zugriff auf targetCollection in Tabellenspalten.

Hinweis: ctx.collectionField ist nur verfügbar, wenn das Feld an die Definition einer Sammlung (Collection) gebunden ist. In Szenarien wie unabhängigen JSBlock-Blöcken oder Aktionsereignissen ohne Feldanbindung ist es normalerweise undefined. Es wird empfohlen, vor der Verwendung eine Prüfung auf Nullwerte durchzuführen.

#Typdefinition

collectionField: CollectionField | null | undefined;

#Gängige Eigenschaften

EigenschaftTypBeschreibung
namestringFeldname (z. B. status, userId)
titlestringFeldtitel (einschließlich Internationalisierung)
typestringDatentyp des Feldes (string, integer, belongsTo usw.)
interfacestringInterface-Typ des Feldes (input, select, m2o, o2m, m2m usw.)
collectionCollectionDie Sammlung, zu der das Feld gehört
targetCollectionCollectionDie Ziel-Sammlung des Verknüpfungsfeldes (nur bei Verknüpfungstypen vorhanden)
targetstringName der Ziel-Sammlung (für Verknüpfungsfelder)
enumarrayAufzählungsoptionen (Select, Radio usw.)
defaultValueanyStandardwert
collectionNamestringName der zugehörigen Sammlung
foreignKeystringName des Fremdschlüsselfeldes (belongsTo usw.)
sourceKeystringVerknüpfungs-Quellschlüssel (hasMany usw.)
targetKeystringVerknüpfungs-Zielschlüssel
fullpathstringVollständiger Pfad (z. B. main.users.status), verwendet für API- oder Variablenreferenzen
resourceNamestringRessourcenname (z. B. users.status)
readonlybooleanOb das Feld schreibgeschützt ist
titleablebooleanOb es als Titel angezeigt werden kann
validationobjectKonfiguration der Validierungsregeln
uiSchemaobjectUI-Konfiguration
targetCollectionTitleFieldCollectionFieldDas Titelfeld der Ziel-Sammlung (für Verknüpfungsfelder)

#Gängige Methoden

MethodeBeschreibung
isAssociationField(): booleanOb es ein Verknüpfungsfeld ist (belongsTo, hasMany, hasOne, belongsToMany usw.)
isRelationshipField(): booleanOb es ein Beziehungsfeld ist (einschließlich o2o, m2o, o2m, m2m usw.)
getComponentProps(): objectRuft die Standard-Props der Feldkomponente ab
getFields(): CollectionField[]Ruft die Feldliste der Ziel-Sammlung ab (nur für Verknüpfungsfelder)
getFilterOperators(): object[]Ruft die von diesem Feld unterstützten Filteroperatoren ab (z. B. $eq, $ne usw.)

#Beispiele

#Verzweigtes Rendering basierend auf dem Feldtyp

if (!ctx.collectionField) return null;
const { interface: iface } = ctx.collectionField;
if (['m2o', 'o2m', 'm2m'].includes(iface)) {
  // Verknüpfungsfeld: Verknüpfte Datensätze anzeigen
  const target = ctx.collectionField.targetCollection;
  // ...
} else if (iface === 'select' || iface === 'radioGroup') {
  const options = ctx.collectionField.enum || [];
  // ...
}

#Prüfen, ob es ein Verknüpfungsfeld ist, und auf die Ziel-Sammlung zugreifen

if (ctx.collectionField?.isAssociationField()) {
  const targetCol = ctx.collectionField.targetCollection;
  const titleField = targetCol?.titleCollectionField?.name;
  // Verarbeitung gemäß der Struktur der Ziel-Sammlung
}

#Aufzählungsoptionen abrufen

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

#Bedingtes Rendering basierend auf Schreibschutz-/Anzeigemodus

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)} />);
}

#Titelfeld der Ziel-Sammlung abrufen

// Bei der Anzeige eines Verknüpfungsfeldes kann targetCollectionTitleField verwendet werden, um den Namen des Titelfeldes abzurufen
const titleField = ctx.collectionField?.targetCollectionTitleField;
const titleKey = titleField?.name ?? 'title';
const assocValue = ctx.getValue?.() ?? ctx.record?.[ctx.collectionField?.name];
const label = assocValue?.[titleKey];

#Beziehung zu ctx.collection

BedarfEmpfohlene Verwendung
Sammlung des aktuellen Feldesctx.collectionField?.collection oder ctx.collection
Feld-Metadaten (Name, Typ, Interface, Enum usw.)ctx.collectionField
Ziel-Sammlungctx.collectionField?.targetCollection

ctx.collection repräsentiert normalerweise die an den aktuellen Block gebundene Sammlung; ctx.collectionField repräsentiert die Definition des aktuellen Feldes in der Sammlung. In Szenarien wie Untertabellen oder Verknüpfungsfeldern können sich beide unterscheiden.

#Hinweise

  • In Szenarien wie JSBlock oder JSAction (ohne Feldanbindung) ist ctx.collectionField normalerweise undefined. Es wird empfohlen, vor dem Zugriff Optional Chaining zu verwenden.
  • Wenn ein benutzerdefiniertes JS-Feld nicht an ein Sammlungsfeld gebunden ist, kann ctx.collectionField den Wert null haben.
  • targetCollection existiert nur für Felder vom Typ Verknüpfung (z. B. m2o, o2m, m2m); enum existiert nur für Felder mit Optionen wie Select oder RadioGroup.

#Verwandte Themen

  • ctx.collection: Mit dem aktuellen Kontext verknüpfte Sammlung
  • ctx.model: Modell, in dem sich der aktuelle Ausführungskontext befindet
  • ctx.blockModel: Übergeordneter Block, der das aktuelle JS enthält
  • ctx.getValue(), ctx.setValue(): Aktuellen Feldwert lesen und schreiben