Zum Inhalt springen
Anjunar/ DOCS

Eigene Knotentypen

Anwendungen erweitern Ember mit typisierten Knoten und getrennten Adaptern für Speicherung, Darstellung und Import.

Konzept

Definieren und registrieren

Ein Knotentyp beschreibt Identität, Projektion und Validierung. Eine Extension trägt ihn zum Schema bei; JSON-Codec, HTML-Semantik und View-Support werden unabhängig registriert.

Eingebaute Knoten ansehen

Der Baum-Inspektor zeigt Knoten-IDs und Typen; ein eigener Typ erscheint hier nach der Registrierung.

A paragraph with marks and an inline link.

9 Wörter · 8 Knoten
ember.core.root/1 [document] ember.rich-text.paragraph/1 [custom-node-types7] ember.core.text/1 [custom-node-types1] "A paragraph with " ember.core.text/1 [custom-node-types2] "marks" ember.core.text/1 [custom-node-types3] " and an inline " ember.link.link/1 [custom-node-types5] ember.core.text/1 [custom-node-types4] "link" ember.core.text/1 [custom-node-types6] "."
Quellcode

Erweiterungsgerüst

Für gespeicherte Daten eine stabile Typ-ID verwenden. Der Resolver prüft doppelte Typen und fehlende Abhängigkeiten vor dem Start der Sitzung.

scala
final case class MentionNode(id: NodeId, userId: String) extends AtomNode object MentionNode extends NodeType[MentionNode]: val typeId = NodeTypeId("app.mention/1") def project(node: EditorNode): Option[MentionNode] = node match case mention: MentionNode => Some(mention) case _ => None def rekey(node: MentionNode, id: NodeId): MentionNode = node.copy(id = id) object MentionExtension extends Extension: val id = ExtensionId("app.mention") override def contribute = ExtensionContributions(nodeTypes = Vector(MentionNode)) // Add a NodeJsonCodec, HtmlSemantics and ViewSupport for this type.