在我的应用程序中使用Quill时,我试图添加动态链接到资源的功能——即如果用户键入用户名或页面名,它会将其包装在指向该资源的链接中。问题是,我不希望这些更改提交到增量或保存回服务器1。
有没有什么方法可以屏蔽/过滤Quill的编辑器内容,而不会将屏蔽的更改发送回增量?或者有没有其他方法可以实现相同的结果?它只需要一个
我已经成功编写了一个Quill插件来识别资源并在用户键入时将它们包装在链接中,但是似乎对编辑器内容的任何修改都会提示更改被吸收到增量中。见鬼,如果我通过开发控制台修改元素,Quill会接收更改。
我想过让链接存在于增量中,并在保存到服务器之前删除格式-但我的实现使增量越来越破碎,经过几次重新加载/会话后,它越来越破坏我的代码检测新链接的能力。
我的下一个想法是创建第二个/克隆的编辑器窗口,并以某种方式选择性地将输入同步回主编辑器窗口。不过,保持两个窗口之间内容同步的后勤工作似乎是一场噩梦,尤其是在使用工具栏按钮时。
1我不想在增量中进行这些更改的原因是资源非常动态——在会话之间可以添加或删除数百个文件,并且有数千个文件每个文件保存数百个对早已死亡的资源的引用会增加很多开销。仅客户端链接是理想的。
羽毛笔内容是德尔塔。你不能在编辑器中放一些最终没有被过滤(以某种方式)或插入德尔塔的东西。出现在编辑器中的是德尔塔的反映。
我想过让链接存在于增量中,并在保存到服务器之前删除格式-但我的实现使增量越来越破碎,经过几次重新加载/会话后,它越来越破坏我的代码检测新链接的能力。
正如你提到的,在我看来,在将Delta发送到服务器之前更改Delta的想法是最可行的解决方案。您应该记住,Delta只是一个具有单个属性(ops)的JSON对象,该属性是表示反映Quill内容所需操作的对象向量,因此有两种方法可以更改它:
我建议你采取第一种方法,因为有API准备好执行这种程序。此外,您可能可以在实用程序部分找到帮助。作为一个例子,看看这个链接是否能给你一个想法。
请记住,理想情况下,您不应该更改Quill Delta(来自编辑器),因为这会改变用户在其中看到的内容。您必须使用它的副本。这样您就可以保持内容不变,并在需要持久化的时刻产生所需的结果。
请注意,根据您所做更改的结果,当需要从数据库中读取数据时,您可能需要逆转该过程。毕竟,Quill最终可能无法理解它,并且内容最终可能会被过滤掉。考虑到这一点,我们可能会认为您将创建一种翻译器,负责从两种不同的“语言”中读取和保存。
为了使服务器不承担翻译发送和接收的每个Delta的责任,我建议您在客户端定义用JavaScript编写的翻译代码。
另外,如果你需要更多关于奎尔的信息,你可以在它的网站上找到你需要的一切,还有更多。
如果你仍然需要帮助,我问你一个你认为你的三角洲应该是什么样子的例子。