【发布时间】:2018-05-19 00:35:20
【问题描述】:
假设我想要一个AtomicText 印迹,它类似于默认的Link 印迹,但它是不可变的,并且只能作为一个整体被删除。更具体地说:
- 光标可以在
AtomicText的字符之间。 - 可以选择
AtomicText的部分内容。 - 删除
AtomicText的至少一个字符会导致删除整个AtomicText。 -
AtomicText创建后就不能再添加字符了。既不是通过键盘事件,也不是通过复制和粘贴。
我的想法是让 AtomicText 扩展自 Embed 印迹。在这种情况下,当光标位于其最后一个字符的右侧并按下退格键时,整个AtomicText 印迹将被删除。但其他操作无法按预期工作。我假设我需要重写一些 Blot 方法以实现正确的行为,但我在这里有点不知所措。
另一个想法是监听text-change 事件,确定光标是否在AtomicText 印迹内并采取相应措施。例如,按下退格键时,找到当前AtomicText 印迹的开始和结束位置,并删除这些索引之间的所有字符。这似乎是一种脆弱的方法。
任何指针将不胜感激。
类似的问题/要求如下:
【问题讨论】:
-
还有哪些操作没有按预期工作?
-
例如,我仍然可以将字符添加到 AtomicText 印迹。我进行了更多实验,并尝试为印迹定义中的节点设置 contentEditable=false。这没有用,但创建一个带有 contentEditable=false 的人工子节点更近了,但还不够近。似乎即使您从 Embed 继承但您的节点有文本,该文本也会像普通文本印迹一样处理,因此您仍然可以向其添加字符。
-
这是对 ProseMirror 的类似请求(“锁定节点”):discuss.prosemirror.net/t/locked-nodes/448/1
-
如果你想阻止打字,你需要它是 contenteditable=false
-
我记得尝试过(见我上面的第二条评论)。但它会导致与光标位置的交互看似中断,并试图删除印迹。例如,我可以将光标放在印迹的中间,然后按退格键将光标放在印迹的开头。这就是为什么我认为我需要用自定义行为覆盖其他 Blot 方法但不明白如何正确地做到这一点。
标签: quill