使用代码镜像,我需要将更改事件数据映射到包含以下内容的元组列表:
(Text before change, Change text, Text after change)
我目前正在监听该change
事件并且可以处理输入更改,但必须为删除、选择移动和撤消编写特定的解决方案。
是否有更可靠的方法适用于标准事件?
编辑
添加当前工作。
再想一想,我只关心文档中的第一个(就位置而言)更改。这是我目前所做的:
var docStart = {'line': 0, 'ch': 0},
docEnd = {'line': Infinity, 'ch': Infinity};
// Just assume that we always have a single change and it is first
// for this example.
cm.on('change', function(cm, change) {
var start, end, text; switch (change.origin) {
case '+delete':
start = change.from;
end = change.from;
text = '';
break;
case 'undo':
start = change.from;
end = change.from;
text = change.text.join('\n');
break;
case 'redo':
start = change.from;
end = {'line': change.to.line, 'ch': change.to.ch + 1};
text = '';
break;
default:
start = change.from;
end = {'line': change.to.line, 'ch': change.to.ch + 1};
text = change.text.join('\n');
break;
}
var pre = cm.doc.getRange(docStart, start);
var post = cm.doc.getRange(end, docEnd);
[pre, text, post]; // output
};
这是不正确的。并非所有事件类型都得到处理,并且许多情况(如行终止符)也没有正确或持续处理。一个替代方案将不胜感激。