javascript - 使用 Quill 进行 socket.io 富文本编辑

标签 javascript node.js socket.io rich-text-editor quill

我试图用socket.io 实现Quill API 来构建一个实时编辑器。我能够获取发出的 Delta,但 quill.updateContents() 似乎没有使用发出的 Delta 操作数据更新文本编辑器。

这是我的代码:

index.html(客户端)

    <!DOCTYPE html>
<html>
<head>
    <title>Connected Clients</title>
    <!--<meta charset="UTF-8"> -->
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <!--<script type="text/javascript" src="jquery.js"></script>  -->
    <script src="/socket.io/socket.io.js"></script>
    <link href="https://cdn.quilljs.com/1.1.1/quill.snow.css" rel="stylesheet">
    <link href="https://cdn.quilljs.com/1.1.2/quill.snow.css" rel="stylesheet">
</head>

<body>
    <div id="editor">
    <p>Hello World!</p>
    <p>Some initial <strong>bold</strong> text</p>
    <p><br></p>
    </div>

    <span id="insertHere"></span>

    <script src="https://cdn.quilljs.com/1.1.2/quill.js"></script>
    <script>
        $(document).ready(function () {
        var quill = new Quill('#editor', {
            theme: 'snow'
        });

        var socket = io();
        socket.on('updated_para',function(data){
            var el = document.getElementById('insertHere');
            el.innerHTML = data;
            var ops = data;
            quill.updateContents(data);
        });

        quill.on('text-change', function(delta, source)  {
            var para = quill.getContents();
            socket.emit('para',{delta:JSON.stringify(delta.ops)});
        });
    });  
    </script>
</body>
</html>

index.js(服务器端)

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});


http.listen(3000, function(){
    console.log('listening on *:3000');
});

io.sockets.on('connection', function(socket){
    console.log('a user connected');

    socket.on('disconnect', function(){
        console.log('user disconnected');
    });

    socket.on('para',function(data){
        io.emit('updated_para',data.delta);
        console.log('message: ' + data.delta);
    });
});

我将非常感谢您的帮助!

最佳答案

我认为你忘记将 json 代码转换回对象.. 在发送到套接字服务器之前将数据转换为 json 字符串。因此,您收到的日期始终是字符串而不是 json.object。

// Replace

var ops = data;
quill.updateContents(data);

// with 

var ops = JSON.parse(data);
quill.updateContents(data);

我计划制作一个类似的编辑器,这样我就可以观看/共享代码编辑。

亲切的问候。

关于javascript - 使用 Quill 进行 socket.io 富文本编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40211787/

相关文章:

actionscript-3 - Adobe Air (AS3) 可以直接使用 socket.io 吗?

javascript - 如何使用 JQuery 验证 Ckeditor

javascript - 初始化自定义类

javascript - Jstree Leaf Node 是一个可扩展的图标。我想要叶 Node 的减号(-)

node.js - Mongoose 检索我的文档内部数组的 null

node.js - 在 Google Compute Engine (GCE) 中允许 WebSockets

javascript - Socket.io自动超时和传输错误

javascript - 服务器响应结束时执行代码 - Node.js

javascript - 正则表达式使用嵌套函数提取函数符号(javascript)

javascript - promise hell 、反模式和错误处理