9

使用伟大的Quill Javascript 富文本编辑器,我试图让两个或多个编辑器共享同一个工具栏。

我想(来自文档)目前这是不可能的,所以我试图通过在被点击为后者的编辑器上通过 API 添加工具栏模块来“模拟”这一点:

// this uses jQuery
$editorTag.click(function(e){
    var tag = e.target;
    var editor = getEditorByTag(tag);
    if( editor )
        editor.addModule('toolbar',{container:'#toolbar'});
});

它似乎有效,但我怀疑 Quill 不喜欢在同一个对象上一遍又一遍地添加相同的模块,因为它最终会吐出:

(节点)警告:检测到可能的 EventEmitter 内存泄漏。增加了 11 位听众。使用emitter.setMaxListeners() 增加限制。quill.js(第 4727 行)

那么有没有办法删除以前添加的模块?就像是:

// installs editor
var editor = new Quill('#editor');
// adds toolbar module
editor.addModule('toolbar',{container:'#toolbar'});
// removes just added toolbar module
editor.removeModule('toolbar');
4

2 回答 2

2

前几天我遇到了同样的问题,并找到了适合我们用例的解决方案。这基本上就是我所做的:

我正在使用位于顶部的自定义工具栏创建一个 Quill 实例。编辑器元素被放置在一个临时的、隐藏的容器中。当用户双击三个文本容器(Editables)中的任何一个时,编辑器元素将从临时容器移植到 Editable 内的新位置。如果用户按下退出键,Editable 将被停用,将编辑器元素移回临时容器。

你可以在这里测试它:https ://codesandbox.io/s/hungry-pine-o8oh9?file=/src/App.js

GitHub 仓库:https ://github.com/maxfahl/Quill-Edit-Multiple

随意使用您喜欢的代码。

于 2020-10-08T08:33:33.627 回答
0

保留 Quills 历史的解决方案是扩展 Toolbar 并注册它有一个模块

    class ToolbarAlt extends Toolbar {
      resetToolbar () {
        this.container.childNodes.forEach(el => {
          const clone = el.cloneNode(true);
          el.parentNode.replaceChild(clone, el);
        });
        this.container.childNodes.forEach((input) => {
          this.attach(input);
        }, this);
      }
   }
   Quill.register('modules/toolbar', ToolbarAlt, true);

然后当你在一个编辑器中聚焦时,使用 quill.getModule('toolbar') 调用你的工具栏

于 2021-01-21T07:35:23.227 回答