在我的应用程序中使用Quill时,我正在尝试添加功能以动态链接到资源-即,如果用户键入用户名或页面名称,则会将其包装在指向该资源的链接中。问题是,我不想将这些更改提交到增量或保存回服务器 1 。
有什么方法可以屏蔽/过滤Quill的编辑器内容,而无需将屏蔽的更改发送回delta?还是有另一种方法可以达到相同的结果?它所需要的只是一个<a>
标记,该标记不会保存到增量中。
我已经成功编写了一个Quill插件来标识资源并将其包装为用户类型的链接,但是似乎对编辑器内容的任何形式的修改都促使更改被吸收到增量中。地狱,如果我通过开发者控制台修改元素,Quill会接受更改。
我曾想过让链接保留在增量中,并在保存到服务器之前删除格式-但是我的实现使增量变得越来越零散,在几次重新加载/会话之后,它越来越破坏了我的代码检测新内容的能力。链接。
我的下一个想法是创建第二个/克隆的编辑器窗口,并以某种方式有选择地将输入同步回主编辑器窗口。保持内容在两个窗口之间同步的后勤工作似乎是一场噩梦,尤其是在使用工具栏按钮时。
1 之所以我不想在增量中进行这些更改,是因为资源非常动态-会话之间可以添加或删除数百个,并且有数千个文件,每个文件都保存了数百个引用长期失效的资源会增加很多开销。链接仅在客户端是理想的。
答案 0 :(得分:0)
查询内容 IS 增量。您不能在编辑器中放入不能最终被过滤(以某种方式)或插入Delta的内容。编辑器中出现的是Delta的反映。
我考虑过让链接保留在三角洲中,然后删除 保存到服务器之前进行格式化-但我的实现 使得三角洲越来越破碎,经过几次重新加载/ 会话,这越来越破坏了我的代码检测新链接的能力。
正如您提到的,在我看来,更改Delta到发送到服务器之前的想法是最可行的解决方案。您应该记住,Delta只是具有单个属性(ops)的JSON对象,它是对象的向量,代表反映Quill内容所需的操作,因此有两种更改方法:
我建议您采用第一种方法,因为已经有API可以执行此类过程。另外,也许您可以在utility section中找到帮助。例如,看看this link是否可以给您一个想法。
请记住,理想情况下,您不应该更改Quill Delta(在编辑器中),因为这会改变用户在其中看到的内容。您必须使用它的副本。这样,您可以保持内容完整无缺,并在需要持久保存时产生所需的结果。
请注意,根据需要进行的更改,当需要从数据库中读取数据时,可能需要撤消该过程。毕竟,Quill可能最终无法理解and the content may end up being filtered out。考虑到这一点,我们可能认为您将要创建一种翻译器,负责读取和保存两种不同的“语言”。
为了使服务器不承担翻译发送和接收的每个Delta的责任,我建议您在客户端定义使用JavaScript编写的翻译代码。
另外,如果您需要有关Quill的更多信息,则可以找到所需的一切on its website,以及更多here。
如果您仍然需要帮助,请问您一个有关您的三角洲外观的示例。