A paragraph with marks and an inline link.
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.
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.