[最初のタイトルは:Ace Editorのキーボードからの操作を阻止するが、それらをキャッチ]editor.getSession()。insert(...)を使用して変更イベントをトリガーする方法を教えてください。
私はリアルタイムコラボレーションプラットフォームを作成するためにAce Editorを使用します。私はhereまたはthereと多かれ少なかれ類似した質問を見つけましたが、どれも私のケースには適していません。
書いて複数のユーザーが存在する場合、問題が発生し、このイベントがあります:
editor.getSession().on('change', function(e) {
// action = e.action
// newString = e.lines
// index = editor.session.doc.positionToIndex(editor.selection.getCursor())
}
ユーザーが何か(キープレスイベント)私がアクションをキャッチしたいを入力したいときは、コンテンツの追加や削除は、カーソルのインデックス((row, col)
ではなく)です。この段階で、の挿入または削除を防止する必要があります。これらの3つのパラメータは、関数sendDelta(action, string, index)
の入力でなければなりません。
簡略化のため、機能sendDelta(action, string, index)
は、挿入する責任を負うinsertDelta(action, string, index)
を呼び出す必要があります。しかし、この挿入は、コンテンツ変更のためにイベントを起こすべきではありません。
要約すると、私はキーボードからのものだけを捕捉したいが、機能insertDelta(action, string, index)
による挿入は捕捉しない。
EDIT
@a_userが示唆したように、私は自分のアプリケーションのデザインは意味をなさないと思います。だから私は最初のものに非常に近い質問をしたいと思います。
私は、ネットワークから情報を受け取り、変更を適用する機能を持っているとしましょう。changeFromServer(action, string, index)
次に、挿入は、情報をネットワークに返送する変更イベントをトリガする。これは無限ループを作ります。
私の説明が明確かどうかはわかりません。そうでなければ、this userは私と同じ問題を抱えていて、彼の説明は私のものよりよく見えます。ところで、私はそこで提供された答えを理解していません。
から呼び出されたときに知っているフラグを使用し、例えば挿入後のカーソル位置、グループ化の取り消し、なぜそれを防止したいですか? –
あなたは書いてありますが、私は少し質問を変えます。 –