在羽毛笔中的文本更改事件上修改文本的最佳方法是什么?

时间:2019-04-02 09:49:44

标签: quill

我们正在尝试将跟踪更改构建到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都没有提供合适的钩子?

0 个答案:

没有答案