ProseMirror 如何让child 节点的内容动态不可编辑?

How to make child content of a node uneditable dynamically in ProseMirror?

我创建了一个包含 captioned_image 节点类型的文档架构,该节点类型引用了单独 CMS 中的图像。该图像有标题和致谢,我希望可以在文档中对其进行编辑。当用户在 ProseMirror 编辑器中编辑内容时,我可以记录更改并向 CMS 发送更新请求。

但是,当其他用户正在 CMS 中编辑图像时,标题和致谢字段可以是 "locked"。

当其他用户锁定了 captioned_image 节点 non-editable 的标题和致谢 child 节点时,如何创建这些字段?一个选择应该不能放在一个位置。

我可以想到两个办法

  1. 当文档的一部分被锁定时,过滤变换动作,取消(重置为旧状态)任何触及该区域的动作(可以通过调用元素上的 forEach 来确定在 action.transform.mapping.maps).

  2. 为这些类型的节点写一个自定义节点视图,并给它们一个属性readOnly。当它们应该变得不可编辑时切换它,当它打开时,使用 contenteditable=false 渲染锁定的内容。但请注意,这并不能防止对内容进行编程更改。此外,这将无法将光标放入其中,这可能是不希望的。