4

我正在尝试将 Quill 富文本编辑器和 socket.io 结合起来。我想要一个类似于谷歌文档的编辑器,人们可以同时编辑。

我正在努力通过网络发送和应用“文本更改”事件,使用类似于以下的代码:

fullEditor.on('text-change', function(delta, source) {
  if (source === 'user') {
    socket.emit('text change', {'who': my_id, 'delta': JSON.stringify(delta)});
  }
});


socket.on('text change', function(msg){
  if(msg.who != my_id) {
      var del = JSON.parse(msg.delta);
      var Delta = fullEditor.getContents().constructor;
      var delta = new Delta(del.startLength,del.endLength,del.ops);
      fullEditor.updateContents( delta );
    }
    });

这是失败的

Uncaught TypeError: undefined is not a function | quill.js:8020

在另一端,我有一个简单的哈希,并且 quill 需要特定类型的对象(InsertOp,http ://quilljs.com/docs/editor/deltas/等)。

任何想法如何使它工作?

4

1 回答 1

2

问题是 updateContents 需要一个 Delta 对象,而当您创建一个对象时,Delta 构造函数需要一个操作对象数组。

最新版本 (v0.14.0) 更新 updateContents 以采用纯 javascript 对象,因此您应该能够:

socket.on('text change', function(msg){
  if(msg.who != my_id) {
    var del = JSON.parse(msg.delta);
    fullEditor.updateContents( del );
  }
});

请注意,要实现像 Google Docs 这样的实时协作,您还需要某种冲突解决方案。最简单的是像GoInstant 的 OT API这样的平台化解决方案,或者您可以使用像ShareJS这样的库自行开发。

于 2014-06-02T01:31:29.823 回答