Невозможно заставить совместное редактирование работать с помощью Prosemirror
Я использую prosemirror для создания редактора для совместной работы, где несколько человек могут редактировать один документ. Я написал следующий код, основываясь на приведенном здесь примере - http://prosemirror.net/docs/guides/collab/
Вот код
const { EditorState } = require('prosemirror-state');
const { EditorView } = require('prosemirror-view');
const { DOMParser } = require("prosemirror-model");
const {schema} = require("./schema");
var collab = require("prosemirror-collab");
function Authority(doc) {
this.doc = doc
this.steps = []
this.stepClientIDs = []
this.onNewSteps = []
}
Authority.prototype.receiveSteps = function(version, steps, clientID) {
if (version != this.steps.length) return
var self = this
// Apply and accumulate new steps
steps.forEach(function(step) {
self.doc = step.apply(self.doc).doc
self.steps.push(step)
self.stepClientIDs.push(clientID)
})
// Signal listeners
this.onNewSteps.forEach(function(f) { f() })
}
Authority.prototype.stepsSince = function(version) {
return {
steps: this.steps.slice(version),
clientIDs: this.stepClientIDs.slice(version)
}
}
var auth = new Authority('');
collabEditor(auth)
function collabEditor(authority) {
var view = new EditorView(document.querySelector("#editor"), {
state: EditorState.create({schema: schema, plugins: [collab.collab()]}),
dispatchTransaction: function(transaction) {
var newState = view.state.apply(transaction)
view.updateState(newState)
var sendable = collab.sendableSteps(newState)
if (sendable)
authority.receiveSteps(sendable.version, sendable.steps,
sendable.clientID)
}
})
authority.onNewSteps.push(function() {
var newData = authority.stepsSince(collab.getVersion(view.state))
view.dispatch(
collab.receiveTransaction(view.state, newData.steps, newData.clientIDs))
})
return view
}
Когда я запускаю этот код (после установки всех зависимостей и настройки простого сервера в nodejs), я в основном могу редактировать текстовое поле, но я не могу открыть две вкладки в Chrome и увидеть, что сотрудничество происходит. Что я делаю неправильно?
Буду любить некоторые отзывы.
1 ответ
Это пример кода для простой одностраничной настройки без внешней связи. Таким образом, нет, он не будет связываться с другими вкладками. Для этого вам нужно переместить полномочия куда-то еще и настроить страницы для фактической связи с ним через HTTP или веб-сокеты. (Смотрите, например, это демо.)