我试图在摩纳哥编辑器中对事件进行一些基本的回放,但是,每当我将编辑传递给executeEdits
时,它总是将我的编辑的range
重置为{ startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }
(如果我在调用executeEdits
后生成消息,就会得到这个消息)。实际上,我试图插入或替换的任何文本总是在第一行开头结束,并有效地反向键入文本。
import * as React from 'react'
import * as monaco from 'monaco-editor'
import { PlayerContext } from './player-context'
const defaultOptions = {
minimap: {
enabled: false
}
}
export default class MonacoEditor extends React.Component {
static contextType = PlayerContext
handleMessage = message => {
this._editor.executeEdits('', [
{ ...message, forceMoveMarkers: true }
])
}
componentDidMount() {
const { path, value, language, ...options } = this.props
const model = monaco.editor.createModel(value, language, path)
this._editor = monaco.editor.create(this._node, {
...defaultOptions,
...options
})
this._editor.setModel(model)
this.context.addMessageHandler('didChange', this.handleMessage)
}
componentWillUnmount() {
this._editor && this._editor.dispose()
this.context.removeMessageHandler('didChange', this.handleMessage)
}
render() {
return <div style={{ height: 500 }} ref={c => (this._node = c)} />
}
}
我正在使用react渲染摩纳哥编辑器,如上面所示。上下文提供了一个对象,它基本上允许我订阅回放事件,传递给handleMessage
的handleMessage
对象的形状是IIdentifiedSingleEditOperation。
{
range: {
startLineNumber: 0,
startColumn: 47,
endLineNumber: 0,
endColumn: 47
},
text: '!'
}
为什么摩纳哥要重置我的编辑操作范围?
发布于 2019-01-06 16:42:34
关于IIdentifiedSingleEditOperation
的文档显示在range
属性上:
要替换的范围。这可以是空的,以模仿一个简单的插入。
因此,您应该能够传递一个空对象,编辑操作将被追加。
但是,班级声明行号和列从1开始,而不是0。由于给定的范围应该描述文本中应该被替换为的部分,而不是应该附加操作的位置,这使得摩纳哥替换了(无效)范围。
https://stackoverflow.com/questions/53873485
复制相似问题