使用Javascript的优秀Quill富文本编辑器,我试图让两个或更多编辑器共享同一个工具栏。
我想(来自documentation)此刻此刻不可能,所以我试图通过在编辑器上通过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');
答案 0 :(得分:1)
前几天,我遇到了同样的问题,并且找到了适用于我们用例的解决方案。这基本上就是我所做的:
我正在使用一个自定义工具栏创建一个Quill实例 在顶部。编辑器元素放置在一个临时的,隐藏的, 容器。当用户双击三个文本中的任何一个时 容器(Editables),将editor元素移植到表格中 将临时容器移至可编辑内容中的新位置。如果一个 用户按下退出键,可编辑功能将被停用, 编辑器元素返回到临时容器。
您可以在这里进行测试:https://codesandbox.io/s/hungry-pine-o8oh9?file=/src/App.js
GitHub存储库:https://github.com/maxfahl/Quill-Edit-Multiple
随意使用您想要的代码。
答案 1 :(得分: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') 调用你的工具栏