Редактирование форматированного текста socket.io с помощью Quill

Я пытался реализовать Quill API с socket.io для создания редактора в реальном времени. Мне удалось получить Delta, но quill.updateContents (), похоже, не обновляет текстовый редактор с помощью выпущенных данных Delta op.

Вот мой код:

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);
    });
});

Я буду очень признателен за вашу помощь!


person Amber Han    schedule 24.10.2016    source источник


Ответы (1)


Я думаю, вы забыли преобразовать код json обратно в объект ... вы конвертируете данные перед отправкой на свой сервер сокетов в строку json. Таким образом, полученная вами дата всегда будет строкой, а не json.object.

// Replace

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

// with 

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

Я планирую сделать подобный редактор, чтобы я мог смотреть / делиться редактированием кода.

Наилучшие пожелания.

person Rene Snijders    schedule 14.11.2016