我们正在尝试将跟踪更改构建到Quill中,其中包括检查用户输入,然后修改文档。例如,如果用户删除一些文本,我们将撤消删除操作,然后应用track-deletion
属性。这是我们所做的简化示例:
quill.on('text-change', (delta, oldContents, source) => {
if (source !== 'user') return;
const trackChangesDelta = delta.invert(oldContents);
trackChangesDelta.ops.forEach((op) => {
if (op.insert) op.attributes['track-deletion'] = true;
// Also handle tracked insertions, etc...
});
quill.updateContents(trackChangesDelta);
});
这种方法大部分都可以使用,但是会遇到一些奇怪的情况:
如果我有文本foo
,并且突出显示了文本,然后键入字母o
,则希望删除整个单词,然后删除{{ 1}}插入。取而代之的是,羊皮纸似乎可以“优化”操作,而在中间o
如果我在段落的开头高亮显示并替换了文本,则插入的字母将移至删除的末尾,但光标停留在错误的位置
我认为这两个问题都是我们在o
内执行text-change
的事实的征兆,我想知道是否有更好的方法(更同步吗?)连接到Quill文档生命周期的方式。
例如,我们遇到的第二个问题是通过使用text-change
使Quill文档在应用音轨更改之前完成对setTimeout
的处理而解决的,但是这还会导致其他一些抖动行为
理想情况下,我想在text-change
尚未应用到文档之前就将其捕获,但是据我所知,Quill和Parchment都没有提供合适的钩子?