[초기 제목은 : Ace Editor에서 키보드로 작업하지 말고 catch하십시오]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)
이 아님).
삽입 또는 삭제는이 단계에서을 방지해야합니다. 이 세 매개 변수는 함수
sendDelta(action, string, index)
의 입력이어야합니다.
간략화를 위해 함수 sendDelta(action, string, index)
은 삽입 할 책임이있는 insertDelta(action, string, index)
을 호출해야합니다. 그러나이 삽입은 내용 변경에 대한 이벤트를 발생시키지 않아야합니다.
요약하면, 나는 키보드에서 오는 것만 포착하고 싶습니다. 기능을 통해 삽입 한 것은 insertDelta(action, string, index)
입니다.
@a_user 제안으로 편집, 내 응용 프로그램의 디자인은 이해가되지 않습니다 생각합니다. 그래서 저는 첫 번째 질문에 아주 가까운 질문을하고 싶습니다.
네트워크에서 정보를 수신하고 변경 사항을 적용하는 기능이 changeFromServer(action, string, index)
인 경우를 가정 해 봅니다. 그런 다음 삽입은 정보를 네트워크로 되돌려 보낼 변경 이벤트를 트리거합니다. 이것은 무한 루프를 만듭니다.
설명이 확실한 것인지 확실하지 않습니다. 그렇지 않다면 this user은 나보다 똑같은 문제가있어서 그의 설명이 내 것보다 좋아 보인다. 그건 그렇고, 나는 거기에 제공된 답을 이해하지 못한다.
에서 호출 될 때 알고 플래그를 사용하여, 예를 들어, 삽입 후 커서 위치, 그룹화 실행 취소, 왜 그것을 막으려 고합니까? –
당신은 쓰고 있습니다, 나는 약간 내 질문을 변경합니다. –