Erstellen einer benutzerdefinierten Formularkomponente im adaptiven Formularblock
Edge Delivery Services Forms bietet eine Anpassung, die es Frontend-Entwicklerinnen und -Entwicklern ermöglicht, maßgeschneiderte Formularkomponenten zu erstellen. Diese benutzerdefinierten Komponenten lassen sich nahtlos in das WYSIWYG-Authoring-Erlebnis integrieren und können im Formulareditor einfach hinzugefügt, konfiguriert und verwaltet werden. Mit benutzerdefinierten Komponenten können Sie die Funktionalität verbessern und gleichzeitig einen reibungslosen und intuitiven Authoring-Prozess sicherstellen.
In diesem Dokument werden die Schritte zum Erstellen benutzerdefinierter Komponenten durch Formatieren der nativen HTML-Formularkomponenten beschrieben, um das Anwendererlebnis zu verbessern und den visuellen Reiz des Formulars zu erhöhen.
Architekturüberblick
Die benutzerdefinierte Komponente für den Forms-Block folgt einem MVC (Model View Controller-Architekturmuster:
Modell
-
Wird durch das JSON-Schema für jede
field/component
definiert. -
Bearbeitbare Eigenschaften sind in der entsprechenden JSON-Datei angegeben (siehe „blöcke/form/models/form- components„).
-
Diese Eigenschaften stehen Autoren im Formular-Builder zur Verfügung und werden als Teil der Felddefinition (fd) an die Komponente übergeben.
Anzeigen
-
Die HTML-Struktur für jeden Feldtyp wird unter „form-field-types“ beschrieben.
-
Dies ist die Basisstruktur für Ihre Komponente, die erweitert oder geändert werden kann.
-
Die HTML-Basisstruktur für jede vordefinierte Komponente wird in Form-field-types dokumentiert.
Controller-/Komponentenlogik
- In JavaScript implementiert, entweder als vordefinierte (Out-of-the-Box) oder benutzerdefinierte Komponenten. - In
blocks/form/components
für benutzerdefinierte Komponenten.
Vorkonfigurierte Komponenten
OOTB-Komponenten (Out-of-the-Box bieten die Grundlage für die benutzerdefinierte Entwicklung:
-
Vorkonfigurierte Komponenten befinden sich in
blocks/form/models/form-components
. -
Jede vordefinierte Komponente verfügt über eine JSON-Datei, die ihre bearbeitbaren Eigenschaften definiert (z. B.
_text-input.json
,_drop-down.json
). -
Diese Eigenschaften stehen Autoren im Formular-Builder zur Verfügung und werden als Teil der Felddefinition (fd) an die Komponente übergeben.
-
Die HTML-Basisstruktur für jede vordefinierte Komponente wird in Form-field-types dokumentiert.
Durch das Erweitern einer vorhandenen vorkonfigurierten Komponente können Sie deren Grundstruktur, Verhalten und Eigenschaften wiederverwenden und sie an Ihre Anforderungen anpassen.
-
Benutzerdefinierte Komponenten müssen aus einem vordefinierten Satz vorkonfigurierter Komponenten erweitert werden.
-
Das System identifiziert, welche OOTB-Komponente erweitert werden soll, basierend auf der
viewType
-Eigenschaft im JSON-Code des Felds. -
Das System verwaltet eine Registrierung zulässiger benutzerdefinierter Komponentenvarianten. Nur Varianten, die in dieser Registrierung aufgeführt sind, können z. B.
customComponents[]
inmappings.js
verwendet werden. -
Beim Rendern eines Formulars prüft das System die Varianteneigenschaft oder
:type/fd:viewType
. Wenn sie mit einer registrierten benutzerdefinierten Komponente übereinstimmt, lädt die entsprechenden JS- und CSS-Dateien aus demblocks/form/components
. -
Die benutzerdefinierte Komponente wird dann auf die HTML-Basisstruktur der vorkonfigurierten Komponente angewendet, sodass Sie ihr Verhalten und Aussehen verbessern oder überschreiben können.
Struktur der benutzerdefinierten Komponente
Um benutzerdefinierte Komponenten zu erstellen, können Sie die Strukturvorlagen-CLI verwenden, um die für Ihre Komponente erforderlichen Dateien und Ordner einzurichten und dann Code für Ihre benutzerdefinierte Komponente hinzuzufügen.
-
Benutzerdefinierte Komponenten befinden sich im
blocks/form/components
. -
Jede benutzerdefinierte Komponente muss in einem eigenen Ordner platziert werden, der nach der Komponente benannt wird, z. B. Karten. Innerhalb des Ordners sollten die folgenden Dateien sein:
- _cards.json - JSON-Datei, die die Komponentendefinition einer vorkonfigurierten Komponente erweitert, ihre bearbeitbaren Eigenschaften (Modelle) [] die Inhaltsstruktur beim Laden definiert (Definitionen[]).
- cards.js - Die JavaScript-Datei, die die Hauptlogik enthält.
- cards.css - optional, für Stile.
-
Der Name des Ordners und die JS-/CSS-Dateien müssen übereinstimmen.
Wiederverwenden und Erweitern von Feldern in benutzerdefinierten Komponenten
Befolgen Sie beim Definieren von Feldern im JSON-Code Ihrer benutzerdefinierten Komponente (für beliebige Feldergruppen, Standard, Validierung, Hilfe usw.) die folgenden Best Practices, um die Wartung und Konsistenz zu gewährleisten:
-
Sie können Standard-/freigegebene Felder wiederverwenden, indem Sie auf vorhandene freigegebene Container oder Felddefinitionen verweisen (z. B.
../form-common/_basic-input-placeholder-fields.json#/fields
,../form-common/_basic- validation-fields.json#/fields
). Dadurch wird sichergestellt, dass alle Standardoptionen übernommen werden, ohne dass sie dupliziert werden. -
Nur neue oder benutzerdefinierte Felder explizit in Ihrem Container hinzufügen. Dadurch bleibt Ihr Schema trocken und fokussiert.
-
Entfernen oder vermeiden Sie das Duplizieren von Feldern, die bereits über Verweise enthalten sind. Definieren Sie nur Felder, die für die Logik Ihrer Komponente eindeutig sind.
-
Referenzieren Sie Hilfe-Container und andere freigegebene Inhalte (z. B.
../form-common/_help-container.json
) nach Bedarf, um Konsistenz und Verwaltbarkeit zu gewährleisten.
- Dieses Muster erleichtert die zukünftige Aktualisierung oder Erweiterung der Logik und stellt sicher, dass Ihre benutzerdefinierten Komponenten mit dem Rest des Formularsystems konsistent bleiben.
- Prüfen Sie immer, ob vorhandene freigegebene Container oder Felddefinitionen vorhanden sind, bevor Sie neue hinzufügen.
Definieren neuer Eigenschaften für benutzerdefinierte Komponenten
-
Wenn Sie neue Eigenschaften für Ihre benutzerdefinierte Komponente von Autoren erfassen müssen, können Sie dies tun, indem Sie ein Feld im
fields[]
Array der Komponente in der JSON der Komponente definieren. -
Die benutzerdefinierte Komponente wird mithilfe der :type-Eigenschaft identifiziert, die als
fd:viewType
in der JSON-Datei festgelegt werden kann (z. B.fd:viewType: cards
). Dadurch kann das System die richtige benutzerdefinierte Komponente erkennen und laden. Daher ist dies für benutzerdefinierte Komponenten obligatorisch -
Alle neuen Eigenschaften, die in der JSON-Definition hinzugefügt werden, sind in der Felddefinition als Eigenschaften verfügbar.
<propertyName>
in der JS-Logik Ihrer Komponente
Benutzerdefinierte JavaScript-API-Komponente
Die JavaScript-API für benutzerdefinierte Komponenten definiert, wie das Verhalten, das Erscheinungsbild und die Reaktivität Ihrer benutzerdefinierten Formularkomponente gesteuert werden.
Funktion dekorieren
Die Funktion dekorieren ist der Einstiegspunkt für Ihre benutzerdefinierte Komponente. Sie initialisiert die Komponente, verknüpft sie mit ihrer JSON-Definition und ermöglicht es Ihnen, ihre HTML-Struktur und ihr Verhalten zu bearbeiten.
Funktionssignatur:
export default function decorate(element, fieldJson, container, formId) {
// element: The HTML structure of the OOTB component you are extending
// fieldJson: The JSON field definition (all authorable properties)
// container: The parent element (fieldset or form)
// formId: The id of the form
// ... your logic here ...
}
Er kann:
-
Element ändern: Ereignis-Listener hinzufügen, Attribute aktualisieren oder zusätzliches Markup einfügen.
-
Zugriff auf JSON Eigenschaften: Verwenden Sie
fd.properties.<propertyName>
, um die im JSON-Schema definierten Werte zu lesen und in der Komponentenlogik anzuwenden.
Subscribe-Funktion
Die subscribe-Funktion ermöglicht es Ihrer Komponente, auf Änderungen von Feldwerten oder benutzerdefinierte Ereignisse zu reagieren. Dadurch wird sichergestellt, dass die Komponente mit dem Formulardatenmodell synchron bleibt und ihre Benutzeroberfläche dynamisch aktualisieren kann.
Funktionssignatur:
import { subscribe } from '../../rules/index.js';
export default function decorate(fieldDiv, fieldJson, container, formId) {
// Access custom properties defined in the JSON
const { initialText, finalText, time } = fieldJson?.properties;
// ... setup logic ...
subscribe(fieldDiv, formId, (_fieldDiv, fieldModel) => { fieldModel.subscribe(() => {
// React to custom event (e.g., resetCardOption)
// ... logic ...
}, 'resetCardOption');
});
}
Er kann:
-
Callback registrieren: Der Aufruf von subscribe(element, formId, callback) registriert Ihren Callback so, dass er ausgeführt wird, wenn sich die Felddaten ändern. Verwenden Sie zwei Callback-Parameter:
- element: Das HTML-Element, das das Feld darstellt.
- fieldModel: Das -Objekt, das den Status des Felds und die Ereignis-APIs darstellt.
-
Auf Änderungen oder Ereignisse überwachen: Verwenden Sie
fieldModel.subscribe((event) => { ... }, 'eventName')
, um Logik auszuführen, wenn sich ein Wert ändert oder ein benutzerdefiniertes Ereignis ausgelöst wird. Das Ereignisobjekt enthält Details zu den Änderungen.
Erstellen einer benutzerdefinierten Komponente
In diesem Abschnitt erfahren Sie, wie Sie eine benutzerdefinierte Kartenkomponente erstellen indem Sie vordefinierte Optionsschaltflächen-Komponente erweitern.
1. Code-Einrichtung
1.1 Dateien und Ordner
Der erste Schritt besteht darin, die erforderlichen Dateien der benutzerdefinierten Komponente einzurichten und sie mit dem Code im Repository zu verbinden. Dieser Vorgang wird automatisch von der AEM Forms-Strukturvorlagen-CLI durchgeführt, wodurch die Strukturierung und Verkabelung der erforderlichen Dateien beschleunigt wird.
- Öffnen Sie das Terminal und navigieren Sie zum Stammverzeichnis Ihres Formularprojekts.
- Führen Sie die folgenden Befehle aus:
npm install
npm run create:custom-component
Sie wird:
- Fordern Sie auf, neue Komponente zu benennen. Verwenden Sie in diesem Fall beispielsweise -Karten.
- Bitten Sie um die Auswahl einer Basiskomponente (Optionsfeldgruppe auswählen)
Dadurch werden alle erforderlichen Ordner und Dateien erstellt, einschließlich:
blocks/form/
└── components/
└── cards/
├── cards.js
└── cards.css
└── _cards.json
Und verkabelt ihn mit dem Rest des Codes im Repository, wie in der Ausgabe der CLI gezeigt.
Er führt die folgenden Funktionen automatisch aus:
- Fügt den Filtern Karten hinzu, damit sie innerhalb des adaptiven Formularblocks hinzugefügt werden können.
- Aktualisiert die Zulassungsliste der
mappings.js
, sodass sie die neue Kartenkomponente enthält. - Registriert die Definition der Kartenkomponente unter der Auflistung Benutzerdefinierte Komponenten im universellen Editor.
1.2 Verwenden der Komponente im universellen Editor
-
Aktualisieren des universellen Editors: Öffnen Sie das Formular im universellen Editor und aktualisieren Sie die Seite, um sicherzustellen, dass der neueste Code aus dem Repository geladen wird.
-
Fügen Sie die benutzerdefinierte Komponente hinzu
-
Klicken Sie auf Formulararbeitsfläche auf die Schaltfläche Hinzufügen (+).
-
Scrollen Sie zum Abschnitt Benutzerdefinierte Komponenten .
-
Wählen Sie die neu erstellte Kartenkomponente aus, um sie in Ihr Formular einzufügen.
-
Da innerhalb von kein Code vorhanden ist, cards.js
die benutzerdefinierte Komponente als Optionsfeldgruppe gerendert.
1.3 Lokale Vorschau und Tests
Da das Formular nun die benutzerdefinierte Komponente enthält, können Sie das Formular als Proxy verwenden und lokal Änderungen daran vornehmen, um die Änderungen zu sehen:
-
Wechseln Sie zu Ihrem Terminal und führen Sie
aem up
aus. -
Öffnen Sie den unter
http://localhost:3000/{path-to-your-form}
gestarteten Proxy-Server (Pfadbeispiel:/content/forms/af/custom-component-form
)
2. Implementieren von benutzerdefiniertem Verhalten für Ihre benutzerdefinierte Komponente
2.1 Gestalten der benutzerdefinierten Komponente
Fügen wir der Komponente für Formatierung eine Klasse () hinzu und fügen Sie für jedes Optionsfeld ein Bild hinzu. Verwenden Sie dazu den folgenden Code.
Gestalten Sie die benutzerdefinierte Komponente mithilfe der Decorate-Funktion in cards.js
import { createOptimizedPicture } from '../../../../scripts/aem.js';
export default function decorate(element, fieldJson, container, formId) { element.classList.add('card');
element.querySelectorAll('.radio-wrapper').forEach((radioWrapper) => { const image = createOptimizedPicture('https://main--afb--
jalagari.hlx.live/lab/images/card.png', 'card-image'); radioWrapper.appendChild(image);
});
return element;
}
Laufzeitverhalten für die benutzerdefinierte Komponente in cards.css hinzufügen
.card .radio-wrapper { min-width: 320px;
/* or whatever width fits your design */ max-width: 340px;
background: #fff;
border-radius: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
flex: 0 0 auto;
scroll-snap-align: start; padding: 24px 16px;
margin-bottom: 0;
position: relative;
transition: box-shadow 0.2s; display: flex;
align-items: flex-start; gap: 12px;
}
Die Kartenkomponente sieht nun wie folgt aus:
2.2 Dynamisches Verhalten mithilfe der Anmeldefunktion hinzufügen
Wenn das Dropdown-Menü geändert wird, werden die Karten abgerufen und in der Aufzählung der Optionsfeldgruppe festgelegt. Aber die Ansicht verarbeitet dies derzeit nicht. Daher wird wie unten gezeigt gerendert:
Beim Aufruf der API wird das Feldmodell festgelegt, die Änderungen müssen überwacht und die Ansicht entsprechend gerendert werden. Dies wird mithilfe der "".
Konvertieren wir den Ansichtscode im vorherigen Schritt in eine Funktion und rufen Sie dies in der Funktion zum Abonnieren in cards.js
auf, wie unten dargestellt:
import { createOptimizedPicture } from '../../../../scripts/aem.js';
import { subscribe } from '../../rules/index.js';
function createCard(element, enums) {
element.querySelectorAll('.radio-wrapper').forEach((radioWrapper, index) => {
if (enums[index]?.name) {
let label = radioWrapper.querySelector('label');
if (!label) {
label = document.createElement('label');
radioWrapper.appendChild(label);
}
label.textContent = enums[index]?.name;
}
const image = createOptimizedPicture(enums[index].image || 'https://main--afb--jalagari.hlx.page/lab/images/card.png', 'card-image');
radioWrapper.appendChild(image);
});
}
export default function decorate(element, fieldJson, container, formId) {
element.classList.add('card');
createCard(element, fieldJson.enum);
subscribe(element, formId, (fieldDiv, fieldModel) => {
fieldModel.subscribe((e) => {
const { payload } = e;
payload?.changes?.forEach((change) => {
if (change?.propertyName === 'enum') {
createCard(element, change.currentValue);
}
});
});
});
return element;
}
Verwenden Sie die Funktion „Abonnieren“, um die Ereignisänderungen in cards.js zu überwachen
Wenn Sie jetzt das Dropdown-Menü ändern, werden die Karten wie unten dargestellt gefüllt:
2.3 Synchronisieren von Ansichtsaktualisierungen mit dem Feldmodell
Zum Synchronisieren der Ansichtsänderungen mit dem Feldmodell müssen Sie den Wert der ausgewählten Karte festlegen. Fügen Sie also den folgenden Änderungsereignis-Listener in cards.js hinzu, wie unten gezeigt:
Verwenden der Feldmodell-API in cards.js
import { createOptimizedPicture } from '../../../../scripts/aem.js';
import { subscribe } from '../../rules/index.js';
function createCard(element, enums) {
element.querySelectorAll('.radio-wrapper').forEach((radioWrapper, index) => {
if (enums[index]?.name) {
let label = radioWrapper.querySelector('label');
if (!label) {
label = document.createElement('label');
radioWrapper.appendChild(label);
}
label.textContent = enums[index]?.name;
}
radioWrapper.querySelector('input').dataset.index = index;
const image = createOptimizedPicture(enums[index].image || 'https://main--afb--jalagari.hlx.page/lab/images/card.png', 'card-image');
radioWrapper.appendChild(image);
});
}
export default function decorate(element, fieldJson, container, formId) {
element.classList.add('card');
createCard(element, fieldJson.enum);
subscribe(element, formId, (fieldDiv, fieldModel) => {
fieldModel.subscribe((e) => {
const { payload } = e;
payload?.changes?.forEach((change) => {
if (change?.propertyName === 'enum') {
createCard(element, change.currentValue);
}
});
});
element.addEventListener('change', (e) => {
e.stopPropagation();
const value = fieldModel.enum?.[parseInt(e.target.dataset.index, 10)];
fieldModel.value = value.name;
});
});
return element;
}
Jetzt wird die benutzerdefinierte Kartenkomponente angezeigt, wie unten dargestellt:
Änderungen übertragen und per Push übertragen
Nachdem Sie JavaScript und CSS für Ihre benutzerdefinierte Komponente implementiert und lokal überprüft haben, übertragen Sie die Änderungen in Ihr Git-Repository.
git add . && git commit -m "Add card custom component" && git push
Sie haben in wenigen einfachen Schritten erfolgreich eine komplexe benutzerdefinierte Kartenauswahlkomponente erstellt.
Manuelle oder veraltete Methode zum Erstellen benutzerdefinierter Komponenten
Die Legacy-Methode dazu besteht darin, die unten beschriebenen Schritte manuell auszuführen:
-
Wählen Sie eine OOTB Komponente aus, die erweitert werden soll (z. B. Schaltfläche, Dropdown, Texteingabe usw.). Erweitern Sie in diesem Fall die Optionsfeldkomponente .
-
Erstellen Sie einen Ordner in
blocks/form/components
mit dem Namen Ihrer Komponente (in diesem Fall Karten). -
Fügen Sie eine JS Datei mit demselben Namen hinzu:
blocks/form/components/cards/cards.js
.
-
(Optional) CSS-Datei hinzufügen für benutzerdefinierte Stile:
blocks/form/components/cards/cards.css.
-
Definieren Sie eine neue JSON Datei (z. B.
_cards.json
) im selben Ordner wie Ihre JS-Komponentendatei (blocks/form/components/cards/_cards.json
). Dieses JSON sollte eine vorhandene Komponente erweitern und in ihren Definitionenfd:viewType
auf den Namen Ihrer Komponente festlegen (in diesem Fall Karten):- Fügen Sie für alle Feldergruppen (Standard, Validierung, Hilfe usw.) Ihre benutzerdefinierten Felder explizit hinzu.
-
Implementieren Sie die JS- und CSS-Logik:
-
Exportieren Sie eine Standardfunktion wie oben beschrieben.
-
Verwenden Sie den element-Parameter, um die HTML-Basisstruktur zu ändern.
-
Verwenden Sie bei den Parameter fieldJson) für Standardfelddaten.
-
Verwenden Sie abonnieren Funktion, um bei Bedarf Feldänderungen oder benutzerdefinierte Ereignisse zu überwachen.
note note NOTE Implementieren Sie die JS- und CSS-Logik für Ihre benutzerdefinierte Komponente wie oben beschrieben.
-
-
Registrieren Sie Ihre Komponente als Variante im Formular-Builder und legen Sie die Varianteneigenschaft fest oder
Fügen Siefd:viewType/:type
in der JSON zum Namen Ihrer Komponente beispielsweise denfd:viewType
Wert aus derdefinitions[]
als Karten zum Komponenten-Array des -Objekts mitid="form
hinzu.code language-javascript { "definitions": [ { "title": "Cards", "id": "cards", "plugins": { "xwalk": { "page": { "resourceType": "core/fd/components/form/radiobutton/v1/radiobutton", "template": { "jcr:title": "Cards", "fieldType": "radio-button", "fd:viewType": "cards", "enabled": true, "visible": true} } } } } ]}
-
Zuordnungen aktualisieren.js: Fügen Sie den Namen Ihrer Komponente zur Liste OOTBComponentDecorators (für Komponenten im OOTB-Stil) oder customComponents hinzu, damit sie vom System erkannt und geladen wird.
code language-javascript let customComponents = ["cards"]; const OOTBComponentDecorators = [];
-
Aktualisieren Sie _form.: Fügen Sie den Namen Ihrer Komponente zum
filters.components
-Array hinzu, damit sie in der Authoring-Benutzeroberfläche abgelegt werden kann.code language-javascript "filters": [ { "id": "form", "components": [ "cards"]} ]
-
Aktualisieren Sie _component-definition.: Aktualisieren Sie in
models/_component-definition.json
das Array innerhalb der Gruppe mitid custom-components
mit einem -Objekt wie folgt:code language-javascript { "...":"../blocks/form/components/cards/_cards.json#/definitions" }
Dadurch wird der Verweis auf die neue Kartenkomponente bereitgestellt, die mit dem Rest der Komponenten erstellt werden soll
-
Build-:json ausführen: Führen Sie
npm run build:json
aus, um alle Komponenten-JSON-Definitionen zu kompilieren und in einer einzigen Datei zusammenzuführen, die vom Server bereitgestellt wird. Dadurch wird sichergestellt, dass das Schema der neuen Komponente in der zusammengeführten Ausgabe enthalten ist. -
Übertragen Sie Ihre Änderungen in das Git-Repository und übertragen Sie sie.
Jetzt können Sie die benutzerdefinierte Komponente zu Ihrem Formular hinzufügen.
Erstellen einer zusammengesetzten Komponente
Eine zusammengesetzte Komponente wird durch Kombinieren mehrerer Komponenten erstellt.
Eine zusammengesetzte Komponente der Nutzungsbedingungen besteht beispielsweise aus einem übergeordneten Bedienfeld, das Folgendes enthält:
-
Ein Textfeld zur Anzeige der Begriffe
-
Ein Kontrollkästchen zum Erfassen der Benutzerzustimmung
Diese Kompositionsstruktur wird als Vorlage innerhalb der JSON-Datei der jeweiligen Komponente definiert. Das folgende Beispiel zeigt, wie Sie eine Vorlage für eine Komponente der Nutzungsbedingungen definieren:
{
"definitions": [
{
"title": "Terms and conditions",
"id": "tnc",
"plugins": {
"xwalk": {
"page": {
"resourceType": "core/fd/components/form/termsandconditions/v1/termsandconditions",
"template": {
"jcr:title": "Terms and conditions",
"fieldType": "panel",
"fd:viewType": "tnc",
"text": {
"value": "Text related to the terms and conditions come here.",
"sling:resourceType": "core/fd/components/form/text/v1/text",
"fieldType": "plain-text",
"textIsRich": true
},
"approvalcheckbox": {
"name": "approvalcheckbox",
"jcr:title": "I agree to the terms & conditions.",
"sling:resourceType": "core/fd/components/form/checkbox/v1/checkbox",
"fieldType": "checkbox",
"required": true,
"type": "string",
"enum": [
"true"
]
}
}
}
}
}
}
],
...
}
Best Practices
Beachten Sie die folgenden Punkte, bevor Sie Ihre eigene benutzerdefinierte Komponente erstellen:
-
Konzentrieren Sie Ihre Komponentenlogik: Fügen Sie nur hinzu bzw. überschreiben Sie nur, was für Ihr benutzerdefiniertes Verhalten erforderlich ist
-
Nutzen der Basisstruktur: Verwenden Sie den vorkonfigurierten HTML als Ausgangspunkt
-
Bearbeitbare Eigenschaften verwenden: Verfügbarmachen konfigurierbarer Optionen über das JSON-Schema
-
Namespace Ihres CSS: Vermeiden Sie Stilkollisionen durch die Verwendung eindeutiger Klassennamen
Verweise
-
form-field-types: HTML-Basisstrukturen und -Eigenschaften für alle Feldtypen. Klicken Sie hier um detaillierte Formularfeldstrukturen und -eigenschaften anzuzeigen.
-
blöcke/form/models/form-components: Vorkonfigurierte und benutzerdefinierte Komponenteneigenschaftsdefinitionen.
-
blöcke/form/components: Platzieren Sie für Ihre benutzerdefinierten Komponenten. Beispiel:
blocks/form/components/countdown-timer/_countdown-timer.json
zeigt, wie eine Basiskomponente erweitert und neue Eigenschaften hinzugefügt werden.