Block-Erweiterung
In NocoBase ist ein Block ein Inhaltsbereich auf einer Seite — beispielsweise Tabelle, Formular, Diagramm, Detailansicht usw. Durch Erweitern der BlockModel-Basisklassen können Sie benutzerdefinierte Blöcke erstellen und im Menü „Block hinzufügen" registrieren.
Auswahl der Basisklasse
NocoBase stellt drei Block-Basisklassen bereit, je nach Datenanforderung:
Die Vererbungskette ist: BlockModel → DataBlockModel → CollectionBlockModel → TableBlockModel.
In der Regel gilt: Wenn Sie einen sofort einsatzbereiten Tabellenblock möchten, verwenden Sie direkt TableBlockModel — es bringt Feldspalten, Aktionsleiste, Pagination, Sortierung und vollständige Funktionen mit und ist die am häufigsten verwendete Basisklasse. Wenn Sie das Rendering vollständig anpassen möchten (z. B. Kartenliste, Zeitstrahl), verwenden Sie CollectionBlockModel und schreiben renderComponent selbst. Für die Anzeige statischer Inhalte oder benutzerdefinierter UI reicht BlockModel aus.
DataBlockModel hat eine besondere Rolle — es fügt selbst keine neuen Eigenschaften oder Methoden hinzu, der Klassenkörper ist leer. Seine Funktion ist die Klassifizierungs-Markierung: Blöcke, die DataBlockModel erweitern, werden in der UI in der Menügruppe „Datenblöcke" einsortiert. Wenn Ihr Block die Datenbeschaffung selbst verwalten muss (nicht über die standardmäßige Collection-Bindung von NocoBase), können Sie DataBlockModel erweitern. Das ChartBlockModel des Diagramm-Plugins ist ein solches Beispiel — es nutzt eine eigene ChartResource zur Datenbeschaffung und benötigt keine standardmäßige Datentabellen-Bindung. In den meisten Fällen müssen Sie DataBlockModel nicht direkt verwenden — CollectionBlockModel oder TableBlockModel reichen.
BlockModel-Beispiel
Ein einfachster Block — unterstützt das Bearbeiten von HTML-Inhalt:
Dieses Beispiel deckt die drei Schritte der Block-Entwicklung ab:
renderComponent()— rendert die Block-UI, liest Eigenschaften überthis.propsdefine()— legt den im Menü „Block hinzufügen" angezeigten Namen festregisterFlow()— fügt ein visuelles Konfigurationspanel hinzu, in dem Benutzer den HTML-Inhalt bearbeiten können
CollectionBlockModel-Beispiel
Wenn der Block an eine NocoBase-Datentabelle gebunden werden muss, verwenden Sie CollectionBlockModel. Es übernimmt automatisch die Datenbeschaffung:
Im Vergleich zu BlockModel bringt CollectionBlockModel Folgendes zusätzlich mit:
static scene— deklariert das Block-Szenario. Häufige Werte:BlockSceneEnum.many(Liste mit mehreren Datensätzen),BlockSceneEnum.one(Detail/Formular für einen einzelnen Datensatz). Vollständige Aufzählung enthält außerdemnew,select,filter,subForm,bulkEditFormu. a.createResource()— erstellt die Datenressource,MultiRecordResourcedient zum Abrufen mehrerer Datensätzethis.resource.getData()— ruft die Daten der Datentabelle ab
TableBlockModel-Beispiel
TableBlockModel erbt von CollectionBlockModel und ist der eingebaute vollständige Tabellenblock von NocoBase — mit Feldspalten, Aktionsleiste, Pagination, Sortierung und allen Funktionen. Wenn Benutzer in „Block hinzufügen" „Tabelle" wählen, ist es genau dieses Modell.
In der Regel: Wenn das eingebaute TableBlockModel die Anforderungen erfüllt, fügen Benutzer es direkt in der Oberfläche hinzu, und Entwickler müssen nichts tun. Nur wenn Sie auf Basis von TableBlockModel anpassen müssen, ist Vererbung nötig — beispielsweise:
- Eingebaute Aktionsgruppen oder Feldspalten-Modelle durch Überschreiben von
customModelClassesersetzen - Über
filterCollectioneinschränken, dass es nur für bestimmte Datentabellen verfügbar ist - Zusätzliche Flows registrieren, um benutzerdefinierte Konfigurationselemente hinzuzufügen
Vollständiges Anpassungsbeispiel zu TableBlockModel siehe Ein Frontend-Backend-Datenmanagement-Plugin erstellen.
Block registrieren
Im load() des Plugins registrieren:
Nach der Registrierung können Sie in der NocoBase-Oberfläche auf „Block hinzufügen" klicken und Ihren benutzerdefinierten Block sehen.
Vollständiger Quellcode
- @nocobase-example/plugin-simple-block — BlockModel-Beispiel
- @nocobase-example/plugin-collection-block — CollectionBlockModel-Beispiel
Verwandte Links
- Plugin-Praxis: Einen benutzerdefinierten Anzeige-Block erstellen — Einen konfigurierbaren BlockModel-Block von Grund auf erstellen
- Plugin-Praxis: Ein Frontend-Backend-Datenmanagement-Plugin erstellen — Vollständiges Beispiel mit TableBlockModel + benutzerdefiniertem Feld + benutzerdefinierter Aktion
- FlowEngine-Übersicht — Grundlegende Verwendung von FlowModel und registerFlow
- Feld-Erweiterung — Benutzerdefinierte Feld-Components
- Aktions-Erweiterung — Benutzerdefinierte Aktionsbuttons
- Resource API Cheatsheet — Vollständige Methoden-Signaturen von MultiRecordResource / SingleRecordResource
- FlowDefinition — Vollständige Parameter und Event-Typen für registerFlow
- Vollständige FlowEngine-Dokumentation — Vollständige Referenz

