Code Mirror を使用して、変更イベント データを、以下を含むタプルのリストにマップする必要があります。
(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
};
これは正しくありません。すべてのイベント タイプが処理されるわけではなく、行末記号などの多くのケースも正しく処理されないか、常に処理されるわけではありません。代替案をいただければ幸いです。