ProseMirror: использование "дыр"/contentDOM при возврате узлов DOM из `.toDOM`

В ProseMirror .toDOM Метод схемы обычно возвращает вложенный массив, который описывает, как визуализировать узел в DOM, аналогично структуре данных "виртуальный дом". Эта структура данных также может содержать то, что ProseMirror называет "дырой", представленной0. В это отверстие ProseMirror вставит содержимое узла, например текст или другие узлы.

Но .toDOMтакже может возвращать строку или узел DOM, которые просто используются как есть.

Можно ли определить отверстия, даже если toDOMвозвращает узел DOM? Нужно ли мне реализовать собственный DOMSerializer, который, по всей видимости, отвечает за .toDOM возвращаемое значение и создание {dom, contentDom?}объект. Если да, то как мне это использовать?

1 ответ

Можно ли определять дыры, даже когда toDOM возвращает узел DOM?

Нет. Определение дыры имеет смысл только тогда, когда есть несколько дочерних элементов DOM внутри представления DOM данного узла ProseMirror. Определение отверстия сообщает PM, куда вставить следующий дочерний узел PM.

Рассмотрим пример:

imageAlt: {
  toDOM: () => ['div', ['h2', 'Alt'], ['div', 0]],
  content: 'inline*',
  defining: true,
  isolating: true
}

Это значит, что imageAlt будет отображаться так:

<div>
    <h2>Alt</h2>
    <div>Content Goes Here</div>
</div>

Дочерние узлы PM были бы вставлены либо под h2 или div; поэтому мы явно указали, что h2 содержит дочерний узел PM.

Но в случае, когда toDom()возвращает dom.Node, но не массив, это означает, что есть только один вариант, поэтому нет необходимости определять отверстие. Dom.Node всегда один глубокий уровень и любой ребенок ProseMirror узел будет прямым потомком.

Другие вопросы по тегам