2017-05-15 5 views
0

[最初のタイトルは: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は私と同じ問題を抱えていて、彼の説明は私のものよりよく見えます。ところで、私はそこで提供された答えを理解していません。

+0

から呼び出されたときに知っているフラグを使用し、例えば挿入後のカーソル位置、グループ化の取り消し、なぜそれを防止したいですか? –

+0

あなたは書いてありますが、私は少し質問を変えます。 –

答えて

0

、多くの物事が間違っているだろうあなたが変更イベントを防ぐ場合は、変更イベントがchangeFromServer

var fromServer = false 
function changeFromServer() { 
    fromServer = true 
    // call applyDelta here 
    fromServer = false 
} 
doc.on("change", function(e) { 
    if (fromServer) return; 
}) 
関連する問題