1

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

これは正しくありません。すべてのイベント タイプが処理されるわけではなく、行末記号などの多くのケースも正しく処理されないか、常に処理されるわけではありません。代替案をいただければ幸いです。

4

1 に答える 1