Editor
Die Haupt-Editor-Instanz. Nutze es für Lebenszyklus-Events, Manager und Befehlsausführung.
Dieser Leitfaden konzentriert sich auf die praktische Implementierung: strenge Typisierung für den Lebenszyklus des Editors, Plugin-Verträge und benutzerdefinierte Komponentendefinitionen, die Ihr Team langfristig aufrechterhalten kann.
Typquelle
Eingebaute Version 1.x
Empfohlener Modus
STRICT: Wahr
Anwendungsfall
Produktionsredakteure
Die Haupt-Editor-Instanz. Nutze es für Lebenszyklus-Events, Manager und Befehlsausführung.
Repräsentiert einen Knoten im Leinwandbaum. Nützlich für typisierte Ereignishandler und benutzerdefinierte Traits.
Ein schleppbarer Baustein. Typsichere Blockdefinitionen reduzieren Fehler bei Laufzeit-Inhalten.
Verwendet beim Registrieren neuer Komponententypen über ComponentManager.addType().
Er tippt stark Standardwerte und Traits ein, damit Teammitglieder denselben Komponentenvertrag wiederverwenden.
Deckt Speicherkonfiguration und -abläufe für lokale oder entfernte Persistenz-Workflows ab.
Schritt 01
Aktiviere den Strict-Mode und noImplicitAny, bevor du die Editor-Logik schreibst, um Fehler von Plugins und Komponenten frühzeitig zu erkennen.
Schritt 02
Editor verwenden | null für den Initialisierungsfluss und Hinzufügen von Guards vor dem Aufruf von Manager-APIs aus asynchronen Rückrufen.
Schritt 03
Definiere Options-Schnittstellen mit den Standardeinstellungen, damit Plugin-APIs über Projekte und Versionen hinweg stabil bleiben.
Schritt 04
Standardisieren Sie Komponentenmerkmale und Standardwerte mit gemeinsamen TypeScript-Typen, um Teams auszugleichen.
Lassen Sie die Editor-Initialisierung und den Ereignisfluss von Anfang an eingeschrieben. Dadurch werden ungültige Manageraufrufe und Event-Payload-Fehler frühzeitig erkannt.
import grapesjs from 'grapesjs';
import type { Editor, Component, Block } from 'grapesjs';
// Typed editor instance
let editor: Editor | null = null;
editor = grapesjs.init({
container: '#gjs',
storageManager: false,
});
// Typed event handlers
editor.on('component:add', (component: Component) => {
console.log('Added component:', component.get('type'));
});
// Typed block access
const blockManager = editor.BlockManager;
const blocks: Block[] = blockManager.getAll().models;Definiere Plugin-Optionen, Schnittstellen und Standardeinstellungen, um deine Erweiterung für Teams sicher und vorhersehbar über Releases hinweg vorhersehbar zu machen.
import type { Editor } from 'grapesjs';
interface MyPluginOptions {
apiKey?: string;
debug?: boolean;
}
const myPlugin = (editor: Editor, opts: MyPluginOptions = {}) => {
const { apiKey = '', debug = false } = opts;
editor.BlockManager.add('custom-block', {
label: 'Custom Block',
category: 'Custom',
content: '<div class="custom-block">Custom content</div>',
});
if (debug) {
console.log('Plugin initialized with API key:', apiKey);
}
};
export default myPlugin;Typisierte Komponentendefinitionen reduzieren Laufzeit-Trait-Fehler und helfen Produktteams, wiederverwendbare Inhaltsmodelle zu erstellen.
import type { ComponentDefinition, ComponentProperties } from 'grapesjs';
// Typed component definition
const heroComponent: ComponentDefinition = {
model: {
defaults: {
tagName: 'section',
draggable: true,
droppable: false,
attributes: { class: 'hero-section' },
traits: [
{ type: 'text', name: 'headline', label: 'Headline' },
{ type: 'text', name: 'subheadline', label: 'Subheadline' },
],
} as ComponentProperties,
},
};
editor.ComponentManager.addType('hero', heroComponent);Alle Premium-Plugins enthalten TypeScript-Definitionen für eine sicherere und schnellere Integration.
Plugins durchsuchen